python - 如何从值列表中将新列附加到 pandas groupby 对象

标签 python pandas group-by iteration dataframe

我想编写一个脚本,从列中获取系列值,将它们拆分为字符串并为每个结果字符串创建一个新列(现在用 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

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

最佳答案

我认为您只是在函数中过早地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)

它应该可以正常工作!

关于python - 如何从值列表中将新列附加到 pandas groupby 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33149967/

相关文章:

python - 在 Pandas 中按周分组

python - 创建数据框分组的切片

python - Django 自定义标签未呈现 (GAE)

python - 索引 Pandas 数据帧 : integer rows, 命名列

python - 最小化具有共同值的行,添加附加值的列

python-3.x - 使用 pandas 数据帧映射到来自交通(节点)点的交通容量请求

python - 如何通过在 Bokeh 中使用 Select 小部件设置源来更新绘图

python - 如何在不熟悉其来源的 .py 文件的情况下解析我使用的方法的结果?

Python 错误 - UnboundLocalError : local variable referenced before assignment

python - 如何过滤阅读超过4本书的用户?