【问题标题】:How to append new columns to a pandas groupby object from a list of values如何从值列表中将新列附加到熊猫 groupby 对象
【发布时间】:2016-01-13 23:54:00
【问题描述】:

我想编写一个脚本,该脚本从列中获取系列值,将它们拆分为字符串并为每个结果字符串创建一个新列(现在用 NaN 填充)。由于 df 是 groupedby Column1,我想为每个组执行此操作

我的输入数据框如下所示:

df1:
      Column1 Column2   
    0   L17      a,b,c,d,e
    1   L7       a,b,c
    2   L6       a,b,f
    3   L6       h,d,e

我最终想要的是:

       Column1  Column2     a   b   c   d   e   f   h
    0   L17      a,b,c,d,e  nan nan nan nan nan nan nan
    1   L7       a,b,c      nan nan nan nan nan nan nan
    2   L6       a,b,f      nan nan nan nan nan nan nan

我的代码目前如下所示:

def NewCols(x):
    for item, frame in group['Column2'].iteritems():
        Genes = frame.split(',')
        for value in Genes:
            string = value
            x[string] = np.nan
            return x

df1.groupby('Column1').apply(NewCols)

我的想法是代码循环遍历每个分组对象的 Column2,以逗号分隔 frame 中包含的值并为该组创建一个列表。到目前为止,代码工作正常。然后我添加了

for value in Genes:
   string = value
   x[string] = np.nan
   return x

旨在为列表Genes 中包含的每个值添加一个新列。但是,我的输出如下所示:

   Column1  Column2    d
0   L17      a,b,c,d,e nan
1   L7       a,b,c     nan
2   L6       a,b,f     nan
3   L6       h,d,e     nan

我几乎被吓傻了。有人可以解释为什么只附加一列(甚至没有以第一组的第一个列表中的第一个值命名)并建议我如何改进我的代码?

【问题讨论】:

    标签: python pandas group-by iteration dataframe


    【解决方案1】:

    我认为你只是 return 在你的函数中太早了,在两个循环结束之前。如果你像这样缩进两次:

    def NewCols(x):
        for item, frame in group['Column2'].iteritems():
            Genes = frame.split(',')
            for value in Genes:
                string = value
                x[string] = np.nan
        return x
    
    UngroupedResGenesLineage.groupby('Column1').apply(NewCols)
    

    它应该可以正常工作!

    【讨论】:

      【解决方案2】:
      cols = sorted(list(set(df1['Column2'].apply(lambda x: x.split(',')).sum())))
      df = df1.groupby('Column1').agg(lambda x: ','.join(x)).reset_index()
      pd.concat([df,pd.DataFrame({c:np.nan for c in cols}, index=df.index)], axis=1)
      
          Column1 Column2     a   b   c   d   e   f   h
      0   L17     a,b,c,d,e   NaN NaN NaN NaN NaN NaN NaN
      1   L6      a,b,f,h,d,e NaN NaN NaN NaN NaN NaN NaN
      2   L7      a,b,c       NaN NaN NaN NaN NaN NaN NaN
      

      【讨论】:

        猜你喜欢
        • 2022-11-12
        • 1970-01-01
        • 2019-10-01
        • 2023-01-10
        • 2021-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        相关资源
        最近更新 更多