首页 > 解决方案 > 替换列值以生成新数据框

问题描述

下面的代码片段:

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 循环,但努力提高效率。会有很大的帮助!

标签: python-3.xpandas

解决方案


用于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_dummies或者具有由with创建的多个指标 DataFrame 的 numpy 解决方案numpy array

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

推荐阅读