拆分行并赋值 pandas

问题描述

我有四个数据框如下:

Proxyid A B C D
123 1 0 0 0
456 1 1 1 1
789 0 0 0 0

这是数据框的想法。现在我想复制有多个 1. 的行,并按如下方式分配值。

Proxyid A B C D
123 1 0 0 0
456 1 0 0 0
456 0 1 0 0
456 0 0 1 0
456 0 0 0 1
789 0 0 0 0

我真的很感激任何输入。谢谢。

解决方法

通过 pd.get_dumies 的一个选项:

df1 = (
    pd.get_dummies(
        df.set_index('Proxyid')
        .mul(df.columns[1:])
        .replace('',np.NAN)
        .stack()
    )
    .reset_index().drop('level_1',1)
) 
result = df1.append(df[~df.Proxyid.isin(df1.Proxyid)])

输出:

代理id A B C D
0 123 1 0 0 0
1 456 1 0 0 0
2 456 0 1 0 0
3 456 0 0 1 0
4 456 0 0 0 1
2 789 0 0 0 0

如果您有额外的列,只需将它们添加到 set_index 中并使用:

df1 = df.set_index(['Proxyid','test'])
df1 = pd.get_dummies(df1.mul(df1.columns).replace('',np.NAN).stack()).reset_index()
result = df1.append(df[~df.Proxyid.isin(df1.Proxyid)])