gor*_*jan 10 python dataframe pandas
我有一个如下所示的数据框:
df = pd.DataFrame({"value": [4, 5, 3], "item1": [0, 1, 0], "item2": [1, 0, 0], "item3": [0, 0, 1]})
df
value item1 item2 item3
0 4 0 1 0
1 5 1 0 0
2 3 0 0 1
Run Code Online (Sandbox Code Playgroud)
基本上我想要做的是将一个热编码元素的值替换为"value"列中的值,然后删除"value"列.结果数据框应如下所示:
df_out = pd.DataFrame({"item1": [0, 5, 0], "item2": [4, 0, 0], "item3": [0, 0, 3]})
item1 item2 item3
0 0 4 0
1 5 0 0
2 0 0 3
Run Code Online (Sandbox Code Playgroud)
cs9*_*s95 14
为什么不繁殖?
df.pop('value').values * df
item1 item2 item3
0 0 5 0
1 4 0 0
2 0 0 3
Run Code Online (Sandbox Code Playgroud)
DataFrame.pop 具有就地删除和返回列的良好效果,因此您可以在一个步骤中执行此操作.
如果"item_*"列中除了1之外还有其他内容,那么您可以使用bool:
df.pop('value').values * df.astype(bool)
item1 item2 item3
0 0 5 0
1 4 0 0
2 0 0 3
Run Code Online (Sandbox Code Playgroud)
如果您的DataFrame有其他列,请执行以下操作:
df
value name item1 item2 item3
0 4 John 0 1 0
1 5 Mike 1 0 0
2 3 Stan 0 0 1
# cols = df.columns[df.columns.str.startswith('item')]
cols = df.filter(like='item').columns
df[cols] = df.pop('value').values * df[cols]
df
name item1 item2 item3
0 John 0 5 0
1 Mike 4 0 0
2 Stan 0 0 3
Run Code Online (Sandbox Code Playgroud)