gpt4 book ai didi

python - 如何 "denormalize"数据框/从许多二进制列中创建一列

转载 作者:行者123 更新时间:2023-11-28 22:14:13 26 4
gpt4 key购买 nike

我有一个包含许多二进制列的数据框,这些列指示是否提到了特定的产品名称。我想创建一个单独的列来列出所有这些特定的产品名称,其中该行带有 1。

为简单起见,假设这是我的数据框:

df = pd.DataFrame({'Name': [1,0,0], 'Another Name': [0,1,1], 'Different Name':[0,0,1]})

我想创建这个专栏:

0 ['Name']
1 ['Another Name']
2 ['Another Name','Different Name']

我的思考过程是遍历每一行,如果任何名称有 1,则将其添加到该列的列表中

namelist = list()
if df['Name']==1:
namelist.append("Name")
else if df['Another Name']==1:
namelist.append("Another Name")
else if df['Different Name']==1:
namelist.append("Different Name")

但这不会使列表特定于行。有关如何执行此操作的建议?

我的解决方案:我使用了 G. Anderson 解决方案中的逻辑,但我需要指定感兴趣的列,而不是数据框中的所有列。我确信有比我最终做的更好的方法来做到这一点,但这就是我所做的:

df['Name']=df['Name'].replace({1:'Name',0:''})
df['Another Name']=df['Another Name'].replace({1:'Another Name',0:''})
df['Different Name']=df['Different Name'].replace({1:'Different Name',0:''})

df['Product Name']=df['Name'] + df['Another Name'] + df['Different Name']

最佳答案

这是我的镜头:

df = pd.DataFrame({'Name': (1,0,0), 'Another Name': [0,1,1], 'Different Name':[0,0,1]})

Name Another Name Different Name
0 1 0 0
1 0 1 0
2 0 1 1

用列名或''

替换值
for col in df.columns:
df[col]=df[col].replace({1:col,0:''})

Name Another Name Different Name
0 Name
1 Another Name
2 Another Name Different Name

添加一列,该列是其他列值的列表

df['new_col']=df.iloc[:,:].apply(lambda x: [i for i in list(x) if i], axis=1)

Name Another Name Different Name new_col
0 Name [Name]
1 Another Name [Another Name]
2 Another Name Different Name [Another Name, Different Name]

删除其他列

df=df['new_col']

0 [Name]
1 [Another Name]
2 [Another Name, Different Name]
Name: new_col, dtype: object

关于python - 如何 "denormalize"数据框/从许多二进制列中创建一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com