【问题标题】:How to use two columns to distinguish data points in a pandas dataframe如何使用两列来区分熊猫数据框中的数据点
【发布时间】:2020-12-07 01:41:53
【问题描述】:

我有一个如下所示的数据框:

import pandas as pd
df = pd.DataFrame({'a':[1,2,3], 'b':[[1,2,3],[1,2,3],[1,2,3]], 'c': [[4,5,6],[4,5,6],[4,5,6]]})

我想用 b 列和 c 列分解数据框。我知道如果我们只使用一列,那么我们可以这样做

df.explode('column_name')

但是,我找不到使用两列的方法。所以这是所需的输出。

output = pd.DataFrame({'a':[1,1,1,2,2,2,3,3,3], 'b':[1,2,3,1,2,3,1,2,3], 'c': [4,5,6,4,5,6,4,5,6]})

我试过了

df.explode(['a','b'])

但它不起作用并给了我一个

ValueError: column must be a scalar.

谢谢。

【问题讨论】:

    标签: python pandas dataframe explode


    【解决方案1】:

    @Ben 的列表理解是最快的。但是,如果您不太关心速度,可以使用applypd.Series.explode

    df.set_index('a').apply(pd.Series.explode).reset_index()
    

    或者只是apply。在非列表列上,它将返回原始值

    df.apply(pd.Series.explode).reset_index(drop=True)
    
    Out[42]:
       a  b  c
    0  1  1  4
    1  1  2  5
    2  1  3  6
    3  2  1  4
    4  2  2  5
    5  2  3  6
    6  3  1  4
    7  3  2  5
    8  3  3  6
    

    【讨论】:

      【解决方案2】:

      您可以使用itertools chainzip 来获得结果:

      pd.DataFrame(chain.from_iterable(zip([a] * df.shape[-1], b, c)
                                       for a, b, c in df.to_numpy()))
      
      
          0   1   2
      0   1   1   4
      1   1   2   5
      2   1   3   6
      3   2   1   4
      4   2   2   5
      5   2   3   6
      6   3   1   4
      7   3   2   5
      8   3   3   6
      

      【讨论】:

        【解决方案3】:

        让我们试试

        df=pd.concat([df[x].explode() for x  in  ['b','c']],axis=1).join(df[['a']]).reindex(columns=df.columns)
        Out[179]: 
           a  b  c
        0  1  1  4
        0  1  2  5
        0  1  3  6
        1  2  1  4
        1  2  2  5
        1  2  3  6
        2  3  1  4
        2  3  2  5
        2  3  3  6
        

        【讨论】:

          猜你喜欢
          • 2013-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-08
          • 1970-01-01
          • 2017-05-13
          • 2022-01-12
          • 2019-01-19
          相关资源
          最近更新 更多