我有一个pandas.DataFrame
包含Stockcode和数量:
>>>df
StockCode Quantity
0 85123A 6
1 71053 6
2 84406B 8
3 84029G 6
4 84029E 6
我正在寻找一种解决方案,让pandas.get_dummies()
乘以数量。
我期待的输出应该是这样的:
>>>pd.get_dummies(df['StockCode']) ... --> * df['Quantity']
71053 84029E 84029G 84406B 85123A
0 0 0 0 0 6
1 6 0 0 0 0
2 0 0 0 8 0
3 0 0 6 0 0
4 0 6 0 0 0
我可以做一个for循环来将所有虚拟对象乘以数量,但我希望有一个更“pythonic”的解决方案。
有没有人知道是否有更好的方法来获得那些纠正过的假人?
由于
拉里
答案 0 :(得分:1)
df.reset_index().pivot('index','StockCode','Quantity').fillna(0)
Out[93]:
StockCode 71053 84029E 84029G 84406B 85123A
index
0 0.0 0.0 0.0 0.0 6.0
1 6.0 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 8.0 0.0
3 0.0 0.0 6.0 0.0 0.0
4 0.0 6.0 0.0 0.0 0.0
修复您的代码
pd.get_dummies(df['StockCode']).mul(df.Quantity,0)
Out[97]:
71053 84029E 84029G 84406B 85123A
0 0 0 0 0 6
1 6 0 0 0 0
2 0 0 0 8 0
3 0 0 6 0 0
4 0 6 0 0 0
或pd.get_dummies(df['StockCode']).values*df.Quantity.values[:,None]
答案 1 :(得分:0)
这也有效
df.StockCode.str.get_dummies().mul(df.Quantity, axis=0)
参考
How to multiply each row in pandas dataframe by a different value
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.get_dummies.html