使用python处理列中的多个值

时间:2016-06-02 11:57:10

标签: string python-2.7 pandas dataframe split

我是python中的pandas和pivot函数的新手,需要一些帮助。

如何使用python pandas或pivot table将此表转换为下面的输出:

No  class
1   U234
2   U234,U237,U239
3   U238,U239,U234
4   U237,U234

必需的输出:

No  class
1   U234
2   U234
2   U237
2   U239
3   U238
3   U239
3   U234
4   U237
4   U234

1 个答案:

答案 0 :(得分:2)

您可以先splitclassDataFramestack,然后使用reset_indexrename创建新的Series

print (df['class']
             .str
             .split(',', expand=True)
             .stack()
             .reset_index(drop=True, level=1)
             .rename('class'))
0    U234
0    U237
1    U234
1    U237
1    U239
2    U238
2    U239
2    U234
3    U237
3    U234
Name: class, dtype: object

然后drop原始列classjoinSeries

print (df.drop('class', axis=1)
             .join
             (
             df['class']
             .str
             .split(',', expand=True)
             .stack()
             .reset_index(drop=True, level=1)
             .rename('class')           
             ))

   No class
0   1  U234
0   1  U237
1   2  U234
1   2  U237
1   2  U239
2   3  U238
2   3  U239
2   3  U234
3   4  U237
3   4  U234

如果在 class值中的NaN列中:

print (pd.DataFrame([ x.split(',') for x in df['class'].tolist() ])
         .stack()
         .reset_index(drop=True, level=1)
         .rename('class'))
0    U234
0    U237
1    U234
1    U237
1    U239
2    U238
2    U239
2    U234
3    U237
3    U234
Name: class, dtype: object