【问题标题】:dealing with multiple values in a column using python使用python处理列中的多个值
【发布时间】:2016-10-02 03:39:59
【问题描述】:

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

如何使用 python pandas 或数据透视表将此表转换为以下输出:

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

【问题讨论】:

  • df.dtypes say 是什么意思?

标签: string python-2.7 pandas dataframe split


【解决方案1】:

您可以先将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

如果在 NO NaN 列中的class 值:

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

【讨论】:

  • 谢谢@jezrael。出于某种原因,我收到如下错误:----> 1 print (pd.DataFrame([ x.split(',') for x in test['class'].tolist() ]) .stack() 。 reset_index(drop=True, level=1) .rename('class')) TypeError: 'str' object is not callable
  • 我认为您使用的是旧版本的 pandaspd.__version__ 是什么?
  • 我的是:u'0.17.1'。也许我应该升级?
  • 是的,我的版本是最后一个 - 0.18.1,效果很好。如果使用Anacondawindows,则使用cmd - conda install pandas
  • 是的,它工作正常!再次感谢@jezrael。请解释一下 - 为什么我们需要在第一步中重命名并在第二步中删除和重命名。
猜你喜欢
  • 2021-01-21
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 2021-07-27
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
相关资源
最近更新 更多