【发布时间】:2016-01-14 23:21:20
【问题描述】:
我有以下问题。我有一个数据框,我将groupby 列为一列,然后将strings 的list 包含在另一列中。由于它是分组的,因此我有来自组中多个列的多个列表。现在我想遍历组中的每个列表并计算这些列表中包含的值。最后,对于每个值,我创建一个新列,并希望它包含该组中每个列表中值的总计数。这是我的示例数据框:
df1:
Column1 Column2
0 L17 a,b,c,d,e
1 L7 a,b,c
2 L6 a,b,f
3 L6 a,b,e
我想出来的是:
Column1 Column2 a b c d e f h
0 L17 a,b,c,d,e 1 1 1 1 1 nan nan
1 L7 a,b,c 1 1 1 nan nan nan nan
2 L6 a,b,f 2 2 nan nan 1 1 nan
到目前为止,我编写的代码是:
def NewCols(x):
for key, group in UngroupedResGenesLineage.groupby('Column1'):
for item, frame in group['Column2'].iteritems():
Genes = frame.split(',')
counter = collections.Counter(Genes)
for value in Genes:
string = value
x[string] = sum(counter.values())
return x
X = df1.groupby('Column1').apply(NewCols)
到目前为止,该代码的工作原理是我获得了新列和组中包含的所有值的列表。问题是它们都填充了相同的值,这绝对是不正确的。我最近才发现 Counter 并认为它可能有用,但我不知道如何计算一个组的所有 frame 列表(代码中的“基因”)中的所有值并将每个值加在一起列表中的值。
有人知道我应该如何更改我的代码以实现我想要的吗?提前致谢!
【问题讨论】:
-
为什么
L6e没有1?结果你还需要Column2? -
哦,我的错。在
L6e应该有1,在问题中修复它。是的,Column2应该保留在数据框中。 -
对于 L6,您不想将两行的 Column2 组合起来吗?
-
是的,这正是我想要得到的!
标签: python list pandas group-by dataframe