我有一个如下的数据框:
idx vol loc
0 1 2 unit 68
1 1 1 unit 179
2 1 2 unit 345
3 2 1 unit 233
4 2 1 unit 235
5 2 2 unit 313
6 2 1 unit 313
我希望使用pandas中的'get_dummies'和'groupby'方法,对'loc'列进行一位有效编码,并用'vol'值填充新创建的一位有效编码列。我的预期输出如下。我的挑战是我无法将'vol'列的值填充到新创建的一位有效编码列中。已经尝试了两天,但仍未找到解决方法。希望您能给我一些提示。
预期结果
loc unit 179 unit 233 unit 235 unit 312 unit 313 unit 345 unit 68
id
1 1 0 0 0 0 2 2
2 0 1 1 0 3 0 0
MWE
import pandas as pd
data = {'idx': [1, 1, 1, 2, 2, 2, 2],
'vol': [2, 1, 2, 1, 1, 2, 1],
'loc': ['unit 68', 'unit 179', 'unit 345', 'unit 233', 'unit 235', 'unit 313', 'unit 313']}
df = pd.DataFrame(data)
# Syntax
# pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None) → ’DataFrame’
df = pd.get_dummies(df, columns=['loc'], prefix='', prefix_sep='')
print(df)
df = df.groupby('idx').agg(sum)
print(df)
输出
idx vol unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
0 1 2 0 0 0 0 0 1
1 1 1 1 0 0 0 0 0
2 1 2 0 0 0 0 1 0
3 2 1 0 1 0 0 0 0
4 2 1 0 0 1 0 0 0
5 2 2 0 0 0 1 0 0
6 2 1 0 0 0 1 0 0
vol unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
idx
1 5 1 0 0 0 1 1
2 5 0 1 1 2 0 0