如何选择具有特定值的列来迭代数据框中的所有行?

时间:2019-09-18 09:50:14

标签: python pandas loops dataframe

我发现了这个Pandas Dataframe - select columns with a specific value in a specific row 但是我无法从用户输入中找出如何在迭代中执行此操作。

[0,0,0,0,1,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5]

[通过此链接引用图片1]

我想检索与输入行匹配的值为1的列名。

2 个答案:

答案 0 :(得分:0)

这是一种更有效的方法。更改了代码以适合您的问题。向lambda添加另一个条件。

df.apply(lambda x: print(x.index[(x['phone no'] == number) & (x.isin([1])].values), axis = 1)

如果要在数据框中添加列:

df['cols'] = df.apply(lambda x: print(x.index[(x['phone no'] == number) & (x.isin([1])].values), axis = 1)

我确信有一种高效的方法可以做到这一点。这应该工作。让我知道是否可以。

for i in range(len(df)): if df.columns[(df == 1).iloc[i]].notna(): print(df.columns[(df == 1).iloc[i]].values)

答案 1 :(得分:0)

好的,我想我终于完全理解了您的问题。 如果我正确理解了您的问题,

  • 您要检索某行的值与您的条件匹配的列(值= 1) 示例代码:
>> import pandas as pd
>> df = pd.DataFrame([[1,0,1],[0,1,0],[1,1,0]], columns=["car_db","bike_db","van_db"], index=["7602102000", "7602201132", "7622315645"])
>> df
            car_db  bike_db van_db
7602102000  1       0       1
7602201132  0       1       0
7622315645  1       1       0

>> df.to_csv("tmp.csv")

示例数据在一个名为“ tmp.csv”的cvs文件中,与您的示例完全一样。 您需要列的名称,其中电话号码是7602102000,值是1:

>> df = pd.read_csv("tmp.csv", index_col=0)
>> no = 7602102000  # phone number inputed by your users
>> col_names = df.columns[(df.loc[df.index == no].values==1)[0]]
>> col_names
Index(['car_db', 'van_db'], dtype='object')
>> df[col_names]
            car_db  van_db
7602102000  1       1
7602201132  0       0
7622315645  1       0

这将在满足条件的所有列中打印您。