替换列值以生成新的数据框

时间:2019-11-25 06:43:55

标签: python-3.x pandas

以下代码段:

import pandas as pd

pd.DataFrame(
    {'type': ['A', 'B', 'A', 'C', 'C', 'A'],
     'value': [5, 6, 7, 7, 9, 1]}
)

赠予:

  type  value
0    A      5
1    B      6
2    A      7
3    C      7
4    C      9
5    A      1

想要这个:-

pd.DataFrame(
    {'A': [5, 0, 7, 0, 0, 1],
     'B': [0, 6, 0, 0, 0, 0],
     'C': [0, 0, 0, 7, 9, 0]}
)
   A  B  C
0  5  0  0
1  0  6  0
2  7  0  0
3  0  0  7
4  0  0  9
5  1  0  0

我确实尝试过使用for循环,但是努力提高效率。会很有帮助的!

2 个答案:

答案 0 :(得分:1)

使用Series.unstack进行重塑:

df = df.set_index('type', append=True)['value'].unstack(fill_value=0).rename_axis(None, axis=1)
print (df)
   A  B  C
0  5  0  0
1  0  6  0
2  7  0  0
3  0  0  7
4  0  0  9
5  1  0  0

get_dummiesnumpy array创建的具有多个指标DataFrame的numpy解决方案:

df = pd.get_dummies(df['type']) * df['value'].values[:, None]
print (df)
   A  B  C
0  5  0  0
1  0  6  0
2  7  0  0
3  0  0  7
4  0  0  9
5  1  0  0

答案 1 :(得分:1)

使用get_dummies并乘以第二列:

final_df=pd.get_dummies(df['type']).mul(df['value'],axis=0)

   A  B  C
0  5  0  0
1  0  6  0
2  7  0  0
3  0  0  7
4  0  0  9
5  1  0  0