如果列值设为1,则熊猫打印列

时间:2020-09-26 15:52:01

标签: python pandas

我有行和列,而列代表实际实体。与第一列分开的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

2 个答案:

答案 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']