拆分熊猫列并创建新列来计算拆分值

时间:2019-07-16 21:48:46

标签: python pandas

我有一个愚蠢的数据,其中一列包含多个用逗号分隔的值:

In [62]: df = pd.DataFrame({'U': ['foo', 'bar', 'baz'], 'V': ['a,b,a,c,d', 'a,b,c', 'd,e']})                                     

In [63]: df                                                                                                                      
Out[63]: 
     U          V
0  foo  a,b,a,c,d
1  bar      a,b,c
2  baz        d,e

现在,我想拆分列V,将其删除,并添加列aeae列应包含该行中该字母的出现次数:

In [62]: df = pd.DataFrame({'U': ['foo', 'bar', 'baz'], 'V': ['a,b,a,c,d', 'a,b,c', 'd,e']})                                     

In [63]: df                                                                                                                      
Out[63]: 
     U  a  b  c  d  e
0  foo  2  1  1  1  0
1  bar  1  1  1  0  0
2  baz  0  0  0  1  1

也许是df['V'].str.split(',')pandas.get_dummies的某种组合,但我还不能完全解决。

编辑:显然我必须证明为什么我的问题不是重复的。我认为对于大多数随便的观察者来说,为什么在直观上是显而易见的。

2 个答案:

答案 0 :(得分:3)

这是str.get_dummies

pd.concat([df,df.pop('V').str.split(',',expand=True).stack().str.get_dummies().sum(level=0)],1)
Out[602]: 
     U  a  b  c  d  e
0  foo  2  1  1  1  0
1  bar  1  1  1  0  0
2  baz  0  0  0  1  1

答案 1 :(得分:1)

您可以只使用pandas.Series.str.count。例如:

import pandas as pd

df = pd.DataFrame({'U': ['foo', 'bar', 'baz'], 'V': ['a,b,a,c,d', 'a,b,c', 'd,e']})

columns = ['a', 'b', 'c', 'd', 'e']
# If unknown or large set of columns, then replace above with:
# columns = sorted(set(df['V'].str.split(',').sum()))

for column in columns:
    df[column] = df['V'].str.count(column)

print(df)
#      U          V  a  b  c  d  e
# 0  foo  a,b,a,c,d  2  1  1  1  0
# 1  bar      a,b,c  1  1  1  0  0
# 2  baz        d,e  0  0  0  1  1