将某些索引名称(字符串)复制到新数据帧

问题描述 投票:1回答:1

我希望从现有数据帧的某些行创建新的数据帧。索引是字符串名称(例如:043-095(L01))。我希望复制所有的行,索引从043开始。

我尝试使用通配符来调用行:

df_new = df_old.loc[df_old.index == '043*'] 

但是,这会调出一个空数据帧,只复制列名。

然后我尝试了一种创建索引名称列表并通过循环迭代调用这些索引名称的效率较低的方法。这也行不通:

list = list(df_old.index.get_values()) 
for i in list: 
    df_new = df_old.loc[df_old.index == i]

这将生成一个只包含原始数据帧中最后一列的数据帧。但是,这是一个标题为'over'的索引,因此甚至不适合我正在寻找的过滤。

这是最初的数据帧:

                1    2    3    4    5      ...                 36            37            38            39            40
product                                    ...                                                                           
043-096(L00)  0.0  0.0  0.0  0.0  0.0      ...       5.643140e+00  5.340900e+00  5.088400e+00  4.468070e+00  4.092830e+00
041-092(L01)  0.0  0.0  0.0  0.0  0.0      ...       2.312400e+01  2.292020e+01  2.166400e+01  2.062450e+01  1.961710e+01
043-093(L01)  0.0  0.0  0.0  0.0  0.0      ...       2.019000e-01  1.145850e+00  6.568850e+00  1.580680e+01  2.964780e+01
041-093(L00)  0.0  0.0  0.0  0.0  0.0      ...       3.929880e+01  3.760480e+01  3.625430e+01  3.542060e+01  3.510910e+01
041-093(L01)  0.0  0.0  0.0  0.0  0.0      ...       6.371910e+00  5.821850e+00  5.535770e+00  5.392260e+00  5.291000e+00
043-096(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.750060e+00  1.715700e+00  1.681990e+00  1.358840e+00  1.296470e+00
042-093(L16)  0.0  0.0  0.0  0.0  0.0      ...       1.172700e+00  1.178630e+01  3.434970e+01  7.109020e+01  1.136440e+02
043-093(L00)  0.0  0.0  0.0  0.0  0.0      ...       8.628490e+00  3.177190e+01  7.529960e+01  1.314360e+02  1.981620e+02
041-095(L01)  0.0  0.0  0.0  0.0  0.0      ...       8.165380e-03  8.903470e-03  8.237130e-03  8.687170e-03  9.185370e-03
042-093(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.346020e+01  2.028300e+01  2.922050e+01  3.994700e+01  5.241390e+01
043-095(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.453260e+02  1.051780e+02  7.979190e+01  6.791930e+01  5.806560e+01
043-094(L01)  0.0  0.0  0.0  0.0  0.0      ...       2.359510e+01  2.092200e+01  1.799270e+01  1.547530e+01  1.292230e+01
041-092(L00)  0.0  0.0  0.0  0.0  0.0      ...       5.922860e+01  5.580080e+01  5.150720e+01  4.853910e+01  4.493510e+01
041-095(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.530490e-01  1.583970e-01  1.407330e-01  1.371880e-01  1.355580e-01
041-091(L00)  0.0  0.0  0.0  0.0  0.0      ...       5.372560e+01  5.788070e+01  6.146730e+01  6.655750e+01  7.144250e+01
041-090(L02)  0.0  0.0  0.0  0.0  0.0      ...       0.000000e+00  5.594050e-05  8.369660e-04  2.903470e-03  1.917730e-02
041-090(L00)  0.0  0.0  0.0  0.0  0.0      ...       0.000000e+00  1.534300e-03  8.703700e-03  4.770440e-02  1.738080e-01
041-094(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.385020e+00  1.635600e+00  1.817290e+00  2.056140e+00  2.293480e+00
043-094(L00)  0.0  0.0  0.0  0.0  0.0      ...       9.074630e+02  9.164940e+02  8.776860e+02  7.838060e+02  6.768200e+02
041-091(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.810710e+01  2.097550e+01  2.283200e+01  2.553310e+01  2.845680e+01
039-089(L01)  0.0  0.0  0.0  0.0  0.0      ...       7.822260e-02  9.664860e-02  1.074630e-01  1.214690e-01  1.348120e-01
043-097(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.754870e-07  7.402690e-08  5.900700e-08  1.725820e-08  1.416280e-08
041-094(L00)  0.0  0.0  0.0  0.0  0.0      ...       9.471510e-01  1.195480e+00  1.458680e+00  1.727560e+00  2.054990e+00
039-089(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.983690e-02  2.039220e-02  2.140960e-02  2.252160e-02  2.330300e-02
043-095(L01)  0.0  0.0  0.0  0.0  0.0      ...       7.249500e+00  6.697730e+00  6.278970e+00  6.019280e+00  5.670850e+00
043-097(L00)  0.0  0.0  0.0  0.0  0.0      ...       6.121160e-06  1.084730e-06  6.949800e-07  1.232050e-07  1.013090e-07
sum           0.0  0.0  0.0  0.0  0.0      ...       1.316938e+03  1.325456e+03  1.336783e+03  1.343518e+03  1.362432e+03
over          NaN  NaN  NaN  NaN  NaN      ...       5.504817e-03  5.053151e-03  4.697077e-03  4.480238e-03  4.162301e-03

任何帮助将非常感谢。

python pandas dataframe indexing
1个回答
1
投票

我会尝试这样的东西来打印你所穿过的行。正如另一位评论者所说,你也可以使用startswith代替str.contains。更明确的方法是str.startswith方法。

import pandas as pd


df = pd.read_csv("testdata.txt", header=None)

print(df[df.index.str.contains("043-")]) # string contains version

print(df[df.index.str.startswith("043")]) # index starts with 
© www.soinside.com 2019 - 2024. All rights reserved.