python - Pandas 将 DF 传播到指标 DF

标签 python pandas

我有一个像这样的数据框

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/

相关文章:

python - Pandas:清理 DataFrame 并将其转换为数字

python - 如何在 Python 中实现冗长的 REGEX

python - 使用 python 转储缺少 YAML 语法

python - 大型查询后 psycopg2 泄漏内存

python - python pandas中的相对强度指数

python - 使用 pandas 将表中不同值出现的计数值作为新列添加到表中

Python短网址生成器

python - 让 Python 打印一天中的小时数

python - 查找包含特定字符的字符串的单元格数量

python - 如何从具有数字索引和标题的数据框中获取最大值