python-3.x - 替换列值以生成新数据框
问题描述
下面的代码片段:
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 循环,但努力提高效率。会有很大的帮助!
解决方案
用于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
推荐阅读
- jenkins - 如何使用 jenkins 向 microsoft team\skype 发送管道更改(提交)通知
- python - 尝试在 Google Colab 上安装 xlwings
- django - django:我不小心删除了 manage.py 文件。如何恢复它?
- amazon-web-services - 如何在 aws EC2 中设置 Sockect.io 服务器,然后远程连接到服务器?
- php - 使用 Laravel 自动生成发票
- php - PHP:如何使用 GET 发送 cURL 请求?
- python - Keras model.inputs 不保存名称
- angular - 在 Angular 中使用 Alpine JS 和 Tailwind UI
- typescript - 有时无法识别对象类型
- angular - 如何在 Angular - Spring Boot - Auth0 中获取电子邮件声明