使用伪列中的文本字符串创建数据框列

时间:2019-04-05 17:50:34

标签: python pandas

我有一个数据框,其中使用了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地球,水,心脏

我不太确定从哪里开始,我的搜索还没有使我走得很远。

2 个答案:

答案 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)