我发现了这个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的列名。
答案 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)
好的,我想我终于完全理解了您的问题。 如果我正确理解了您的问题,
>> 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
这将在满足条件的所有列中打印您。