以下代码段:
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循环,但是努力提高效率。会很有帮助的!
答案 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_dummies
和numpy 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