python - 通过列(字符串)中的唯一元素分解 pandas 数据框并创建列联表?

标签 python pandas join split

我有一个 pandas 数据框,我想对其进行一些分析,它看起来像这样:

from pandas import DataFrame
a = DataFrame([{'var1': 'K802', 'var2': 'No Concatenation', 'var3':'73410'},
           {'var1': 'O342,O820,Z370', 'var2': '59514,01968', 'var3':'146010'},
          {'var1': 'Z094', 'var2': 'No Concatenation', 'var3':'233210'},
          {'var1': 'N920', 'var2': '58120', 'var3':'130910'},
          {'var1': 'S801,W2064,I219', 'var2': 'No Concatenation', 'var3':'93630'},
          {'var1': 'O987,O820,Z302,Z370', 'var2': '59514,01968,58611', 'var3':'146010'},
          {'var1': 'O987,O820,Z302,Z370,E115', 'var2': '59514,01968,58611', 'var3':'146020'},
          {'var1': 'N359,N319,J459', 'var2': '52281', 'var3':'113720'},
          {'var1': 'O342,O343,O820,Z370', 'var2': '59514,01968,59871', 'var3':'146010'},
          {'var1': 'J459,C449,E785,I10', 'var2': 'No Concatenation', 'var3':'43810'},
          {'var1': 'Z380,C780,C189,I270,J449,Z933', 'var2': 'No Concatenation', 'var3':'157520'}])
print a.var1
0                              K802
1                    O342,O820,Z370
2                              Z094
3                              N920
4                   S801,W2064,I219
5               O987,O820,Z302,Z370
6          O987,O820,Z302,Z370,E115
7                    N359,N319,J459
8               O342,O343,O820,Z370
9                J459,C449,E785,I10
10    Z380,C780,C189,I270,J449,Z933
Name: var1, dtype: object

它已被截断,因为它来自的 csv 文件有 100 万多行。目标是最终得到这样的结果:

b = DataFrame([{'K802':1, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 0, 'N920':0, 'S801':0, 'W2064': 0, 'I219':0},
           {'K802':0, 'O342': 1, 'O820':1, 'Z370':1, 'Z094': 0, 'N920':0, 'S801':0, 'W2064': 0, 'I219':0},
           {'K802':0, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 1, 'N920':0, 'S801':1, 'W2064': 0, 'I219':0},
           {'K802':0, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 0, 'N920':1, 'S801':0, 'W2064': 0, 'I219':0},
           {'K802':0, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 0, 'N920':0, 'S801':1, 'W2064': 1, 'I219':1}])
print b
   I219  K802  N920  O342  O820  S801  W2064  Z094  Z370
0     0     1     0     0     0     0      0     0     0
1     0     0     0     1     1     0      0     0     1
2     0     0     0     0     0     1      0     1     0
3     0     0     1     0     0     0      0     0     0
4     1     0     0     0     0     1      1     0     0
...

基本上,我想为 a.var1 行中的每个唯一条目获取一个新列,然后使用存在于中的 1 填充列该行或 0 表示不存在。我需要分别对 var1var2var3 执行此操作,然后通过原始 a 的索引将这三个连接起来code> 这样我就可以计算频率,也许还可以计算一些逻辑回归。 我是 Pandas 新手,似乎不知道如何有效地做到这一点。

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用get_dummies pd.Series 上定义的方法。对于此用例,它比 pd.get_dummies 函数更简单。然后,您可以使用 pd.concat 组合生成的 dfs。

pd.concat([a[col].str.get_dummies(',') for col in a], axis=1)
Out: 
    C189  C449  C780  E115  E785  I10  I219  I270  J449  J459  ...    \
0      0     0     0     0     0    0     0     0     0     0  ...     
1      0     0     0     0     0    0     0     0     0     0  ...     
2      0     0     0     0     0    0     0     0     0     0  ...     
3      0     0     0     0     0    0     0     0     0     0  ...     
4      0     0     0     0     0    0     1     0     0     0  ...     
5      0     0     0     0     0    0     0     0     0     0  ...     
6      0     0     0     1     0    0     0     0     0     0  ...     
7      0     0     0     0     0    0     0     0     0     1  ...     
8      0     0     0     0     0    0     0     0     0     0  ...     
9      0     1     0     0     1    1     0     0     0     1  ...     
10     1     0     1     0     0    0     0     1     1     0  ...     

关于python - 通过列(字符串)中的唯一元素分解 pandas 数据框并创建列联表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39449235/

相关文章:

python - 类型错误 : not enough arguments for format string while inserting into mysql database

python - 为 Pandas DataFrame 的图形设置 x 轴间隔(刻度)

python - 如何从 CherryPy 中的 GET 请求中读取参数?

loops - 如何在 Pandas 中将 DataFrame 的行迭代为系列?

python - sqlalchemy:在过滤器或子句元素中引用标签()的列

在hadoop中加入文件A、B、C

php - 将多个表(第三个表上的多个条目)连接到每个用户的单行

python - 如何使Python线程程序(带锁)在多进程上运行?

python - 如何将每一行对与前一列相关联?

python - 使用 Pandas 计算重叠时间范围的持续时间