【发布时间】:2020-06-25 16:39:20
【问题描述】:
我有一个如下的数据框,
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
我的目标是对“loc”列进行 one-hot 编码,并将“vol”值填充到 one-hot 编码列中。热衷于在 pandas 中使用 'get_dummies' 和 'groupby' 方法。
我的预期输出如下。我的挑战是我无法在新创建的 one-hot 编码列中填充“vol”列中的值。
尝试了 2 天,但仍然没有找到解决方法。希望你能给我一个提示。
预期
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
【问题讨论】: