gpt4 book ai didi

python - Pandas 将 DF 传播到指标 DF

转载 作者:行者123 更新时间:2023-11-28 22:15:33 27 4
gpt4 key购买 nike

我有这样一个数据框

import pandas as pd

test = pd.DataFrame(data={"IDX": [0,0,0,1,1,2],
"VAL": [27,5,13,27,24,13]})

IDX VAL
0 0 27
1 0 5
2 0 13
3 1 27
4 1 24
5 2 13

并且想要传播它,以便 IDX 成为列,VAL 成为行名,实际值只是值是否存在/不存在的指示符,如下所示:

out = pd.DataFrame(data={"0": [1, 1, 0, 1],
"1": [0, 0, 1, 1],
"2": [0, 1, 0, 0]}, index=[5, 13, 24, 27])

0 1 2
5 1 0 0
13 1 0 1
24 0 1 0
27 1 1 0

没有 for 循环,有什么方法可以有效地做到这一点?

最佳答案

使用get_dummies使用最大值:

df = pd.get_dummies(test.set_index('VAL')['IDX'].sort_index()).max(level=0)
print (df)
0 1 2
VAL
5 1 0 0
13 1 0 1
24 0 1 0
27 1 1 0

另一种解决方案 - 按组创建列表,然后使用 MultiLabelBinarizer :

s = test.groupby('VAL')['IDX'].apply(list)
print (s)
VAL
5 [0]
13 [0, 2]
24 [1]
27 [0, 1]
Name: IDX, dtype: object

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(s),columns=mlb.classes_, index=s.index)
print (df)
0 1 2
VAL
5 1 0 0
13 1 0 1
24 0 1 0
27 1 1 0

关于python - Pandas 将 DF 传播到指标 DF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52815779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com