我有行和列,而列代表实际实体。与第一列分开的Column值为1或0。第一列是一个键。目的是如果列值为1,则返回列名(第二到最后一列)。 这是我编写的功能,可以正常工作。想知道是否有更好的方式在熊猫中表达这一点,或者甚至有更好的方式表示这种形式的数据,使其对大熊猫更友好。
def return_keys(df,productname):
df2 = df[df['Product']==productname]
print(df2)
columns = list(df2)
cust=[]
for col in columns[1:]:
if (df2[col].to_list()[0]==1):
cust.append(col)
return cust
答案 0 :(得分:1)
如果您的键列不包含0/1,则可以尝试逐行使用apply
。下面是一个示例数据集:
import pandas as pd
import numpy as np
np.random.seed(111)
df = pd.DataFrame({'Product':np.random.choice(['A','B','C'],10),
'Col1':np.random.binomial(1,0.5,10),
'Col2':np.random.binomial(1,0.5,10),
'Col3':np.random.binomial(1,0.5,10)})
df
Product Col1 Col2 Col3
0 A 0 1 1
1 A 1 0 0
2 A 1 1 1
3 A 1 0 0
4 C 1 1 1
5 B 0 1 1
6 C 1 0 0
7 C 0 1 0
8 C 1 1 1
9 A 0 1 0
我们应用一个布尔值并将(axis = 1)应用于此布尔值data.frame,调出列。
(df == 1).apply(lambda x:df.columns[x].tolist(),axis=1)
0 [Col2, Col3]
1 [Col1]
2 [Col1, Col2, Col3]
3 [Col1]
4 [Col1, Col2, Col3]
5 [Col2, Col3]
6 [Col1]
7 [Col2]
8 [Col1, Col2, Col3]
9 [Col2]
答案 1 :(得分:0)
尝试以下操作:
df = pd.DataFrame({'a':[1,2,3], 'b':[0,1,2], 'c':[1,2,4], 'd':[0,2,4]})
cols_with_first_element_1 = df.columns[df.iloc[0]==1].to_list()
print(cols_with_first_element_1)
得出['a', 'c']
。