python - 如果列值为 1,则熊猫打印一列应用于所有列
问题描述
我有行和列,其中的列代表实际实体。除了第一列之外的列值是 1 或 0。第一列是键。如果列值为 1,则目标是返回列名(第二列到最后一列)。这是我编写的函数,它可以工作。想知道是否有更好的方式在 Pandas 中表达这一点,或者甚至更好的方式来表示这种形式的数据以使其对 pandas 更友好。
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 ,您可以尝试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]
推荐阅读
- mongodb - MongoDB 只返回嵌套的对象数组
- javascript - 如何在反应js中获取具有相同属性名称的数组中输入标签的值
- linux - Circle CI如何部署到ssh - 错误无法建立真实性
- python - SyntaxError: invalid character in identifier -- 尽管几乎可以肯定没有不允许的字符
- algorithm - 是否可以限制线性分区问题中的部分大小?
- javascript - 如何在 Jquery 中创建窗帘淡出效果?
- python - 限制 celery 中同时执行的特定任务的数量
- reactjs - POST oauth 令牌最初发送没有数据/标头的 OPTIONS 请求,并以 401 失败
- javascript - 如果我需要稍后定义它,我该如何使用它?
- c# - 如何在 ASP.NET Core 视图中使用 DefineSection(...)?