Python 数据帧:将CSV列扩展到多个列

Python 数据帧:将CSV列扩展到多个列,python,pandas,Python,Pandas,我有一个熊猫数据框 >>> import pandas as pd >>> df = pd.DataFrame([['a', 2, 3], ['a,b', 5, 6], ['c', 8, 9]]) 0 1 2 0 a 2 3 1 a,b 5 6 2 c 8 9 我想将第一列扩展到n列(其中n是唯一的逗号分隔值的数量,在本例中为3)。如果值存在,则每个结果列应为1,否则为0。预期结果是: 1 2 a c b

我有一个熊猫数据框

>>> import pandas as pd
>>> df = pd.DataFrame([['a', 2, 3], ['a,b', 5, 6], ['c', 8, 9]])
     0  1  2
0    a  2  3
1  a,b  5  6
2    c  8  9
我想将第一列扩展到
n
列(其中
n
是唯一的逗号分隔值的数量,在本例中为3)。如果值存在,则每个结果列应为1,否则为0。预期结果是:

   1  2  a  c  b
0  2  3  1  0  0
1  5  6  1  0  1
2  8  9  0  1  0
我提出了以下代码,但对我来说似乎有点迂回

>>> import re
>>> dfSpread = pd.get_dummies(df[0].str.split(',', expand=True)).\
        rename(columns=lambda x: re.sub('.*_','',x))
>>> pd.concat([df.iloc[:,1:], dfSpread], axis = 1)

是否有一个内置函数可以完成我找不到的功能?

使用
get\u dummies

df.set_index([1,2])[0].str.get_dummies(',').reset_index()
Out[229]: 
   1  2  a  b  c
0  2  3  1  0  0
1  5  6  1  1  0
2  8  9  0  0  1

使用
get_假人

df.set_index([1,2])[0].str.get_dummies(',').reset_index()
Out[229]: 
   1  2  a  b  c
0  2  3  1  0  0
1  5  6  1  1  0
2  8  9  0  0  1

你可以在这里使用
pop
+
concat
来获得温家宝回答的另一个版本

pd.concat([df, df.pop(df.columns[0]).str.get_dummies(sep=',')], axis=1)

   1  2  a  b  c
0  2  3  1  0  0
1  5  6  1  1  0
2  8  9  0  0  1

你可以在这里使用
pop
+
concat
来获得温家宝回答的另一个版本

pd.concat([df, df.pop(df.columns[0]).str.get_dummies(sep=',')], axis=1)

   1  2  a  b  c
0  2  3  1  0  0
1  5  6  1  1  0
2  8  9  0  0  1

至少我选择了正确的函数。。。实际上,您将所有其他列设置为“保存”信息的索引,应用函数并将索引设置回原处。这是一个伟大的发人深省的冲动。谢谢(再等8分钟接受你的回答)至少我选择了正确的功能。。。实际上,您将所有其他列设置为“保存”信息的索引,应用函数并将索引设置回原处。这是一个伟大的发人深省的冲动。谢谢(再等8分钟接受您的回复)