Python Pandas-使用另一列中的值进行热编码
我有一个数据框,如下所示Python Pandas-使用另一列中的值进行热编码,python,pandas,Python,Pandas,我有一个数据框,如下所示 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
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
我的目标是用“vol”值填充一个热编码列,对“loc”列进行一个热编码。热衷于在大熊猫身上使用“get_dummies”和“groupby”方法
我的预期输出如下。我的挑战是,我无法在新创建的one热编码列中填充“vol”列中的值
试图花费2天时间,但仍未找到解决方法。希望你能给我一个提示
期望
MWE
输出
你能行
df=df.set_index('idx')
s=df['loc'].str.get_dummies().mul(df['vol'],axis=0).sum(level=0)
unit179 unit233 unit235 unit313 unit345 unit68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
你能行
df=df.set_index('idx')
s=df['loc'].str.get_dummies().mul(df['vol'],axis=0).sum(level=0)
unit179 unit233 unit235 unit313 unit345 unit68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
IIUC
输出:
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
vol 1 1 1 3 2 2 10
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
再加上总数
df.pivot_table('vol', 'idx', 'loc', aggfunc='sum',
fill_value=0, margins=True, margins_name='vol')
输出:
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
vol 1 1 1 3 2 2 10
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
下降行总计:
df.pivot_table('vol', 'idx', 'loc', aggfunc='sum',
fill_value=0, margins=True, margins_name='vol')\
.drop('vol')
输出:
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
vol 1 1 1 3 2 2 10
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
IIUC
输出:
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
vol 1 1 1 3 2 2 10
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
再加上总数
df.pivot_table('vol', 'idx', 'loc', aggfunc='sum',
fill_value=0, margins=True, margins_name='vol')
输出:
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
vol 1 1 1 3 2 2 10
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
下降行总计:
df.pivot_table('vol', 'idx', 'loc', aggfunc='sum',
fill_value=0, margins=True, margins_name='vol')\
.drop('vol')
输出:
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68
idx
1 1 0 0 0 2 2
2 0 1 1 3 0 0
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
vol 1 1 1 3 2 2 10
loc unit 179 unit 233 unit 235 unit 313 unit 345 unit 68 vol
idx
1 1 0 0 0 2 2 5
2 0 1 1 3 0 0 5
我觉得他也需要在输出中包括vol:-我觉得他也需要在输出中包括vol:-