我有一个数据框,其中使用了get_dummies创建了几列(例如df.earth,df.wind,df.water,df.fire,df.heart)和groupby来汇总行,所以现在该行可以有多个带有1的虚拟列。数据框现在如下所示:
ID Earth Wind Water Fire Heart
12 0 0 1 1 1 0
13 1 0 0 0 0 0
14 1 0 0 1 1 0 0
我需要创建一列来检查每个虚拟列,并写出适用于每一行的列名,如下所示:
ID地球风水火心动力
12 0 0 1 1 1 0 0 1风,水,心
13 1 0 0 1 0 0 0地球,水
14 1 0 0 1 0 0 0地球,水,心脏
我不太确定从哪里开始,我的搜索还没有使我走得很远。
答案 0 :(得分:2)
df = pd.DataFrame(
{ 'A': [0, 0, 0],
'B': [1, 0, 0],
'C': [0, 1, 0],
'D': [0, 0, 0],
'E': [1, 0, 1],
'F': [0, 0, 1],
}
)
df
A B C D E F
0 0 1 0 0 1 0
1 0 0 1 0 0 0
2 0 0 0 0 1 1
您可能正在看上面的df。您可以执行以下操作以拉出包含1的列。
columns = []
for col in df.T:
columns.append(df.T[df.T[col] == 1].index.tolist())
has1 = pd.DataFrame(columns).apply(lambda x: ', '.join(x[x.notnull()]), axis = 1)
df['Is1'] = has1
df
A B C D E F Is1
0 0 1 0 0 1 0 B, E
1 0 0 1 0 0 0 C
2 0 0 0 0 1 1 E, F
答案 1 :(得分:2)
使用
df['Powers'] = df.apply(lambda s: ', '.join(s.index[s.eq(1)]), axis=1)