【问题标题】:more than one value with comma in dataframe pandas数据框 pandas 中有多个带逗号的值
【发布时间】:2018-07-26 05:37:58
【问题描述】:

colum 1, colum2 a,b,c 30 b,c,f 40 a,g,z 50 . . . 将上面的数据框与 col1,2 一起使用,我希望数据框与 col3, 4 的数据框一样。 此外, col1 由带有逗号的值组成。 col4 由 col3 之后的 col2 的总和组成。 column3, column4 a 80 b 70 c 70 f 40 g 50 z 50

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    用途:

    df = (df.set_index('colum2')['colum1']
            .str.split(',', expand=True)
            .stack()
            .reset_index(name='column3')
            .groupby('column3', as_index=False)['colum2']
            .sum()
            .rename(columns={'colum2':'column4'})
          )
    print (df)
      column3  column4
    0       a       80
    1       b       70
    2       c       70
    3       f       40
    4       g       50
    5       z       50
    

    解释

    1. 第一个set_index 按列colum2
    2. split 创建DataFrame
    3. stack重塑
    4. reset_index的列创建索引
    5. groupby 和聚合 sum
    6. 必要时最后重命名列

    另一种解决方案:

    from itertools import chain
    
    a = df['colum1'].str.split(',')
    lens = a.str.len()
    
    df = pd.DataFrame({
        'column3' : list(chain.from_iterable(a)), 
        'column4' : df['colum2'].repeat(lens)
    }).groupby('column3', as_index=False)['column4'].sum()
    
    print (df)
      column3  column4
    0       a       80
    1       b       70
    2       c       70
    3       f       40
    4       g       50
    5       z       50
    

    解释

    1. split 创建列表
    2. 通过len获取lsits的长度
    3. 最后一个repeat 列并展平colum1
    4. groupby 和聚合 sum

    【讨论】:

    • 感谢您的回答!我的数据框有超过 500 万行。你能告诉我哪种方式更有效吗?
    • @KenKim - 使用第二个答案。如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记,将其从灰色切换为已填充。谢谢。
    • 完成。非常感谢! :)
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 2018-05-11
    • 2020-12-08
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多