python - 是否可以在不折叠 Pandas DataFrame 的情况下获得 groupby 样式计数?

标签 python pandas dataframe pandas-groupby

我有一个包含 9 列的 DataFrame,我正在尝试添加一列基于前 3 列的唯一值计数(例如,列 A、B 和 C,必须匹配才能计为唯一值,但其余的列可能会有所不同。我尝试像使用 groupby 一样执行此操作:

df = pd.DataFrame(resultsFile500.groupby(['chr','start','end']).size().reset_index().rename(columns={0:'count'}))

这将返回一个包含 5 列的 DataFrame,并且计数是我想要的。但是,我还需要原始数据框中的值,所以我一直试图做的是以某种方式将这些计数值作为原始 df 中的一列。因此,这意味着如果 chrstartend 列中的两行具有相同的值,则 counts 列在两行中均为 2,但它们不会折叠为一行。这里是否有一个我缺少的简单解决方案,或者我需要一起破解一些东西吗?

最佳答案

您可以使用 .transform 获得非折叠行为:

>>> df
   a  b  c  d  e
0  3  4  1  3  0
1  3  1  4  3  0
2  4  3  3  2  1
3  3  4  1  4  0
4  0  4  3  3  2
5  1  2  0  4  1
6  3  1  4  2  1
7  0  4  3  4  0
8  1  3  0  1  1
9  3  4  1  2  1
>>> df.groupby(['a','b','c']).transform('count')
   d  e
0  3  3
1  2  2
2  1  1
3  3  3
4  2  2
5  1  1
6  2  2
7  2  2
8  1  1
9  3  3
>>>

请注意,我必须从 .transform 结果中选择一个任意列,然后只需执行以下操作:

>>> df['unique_count'] = df.groupby(['a','b','c']).transform('count')['d']
>>> df
   a  b  c  d  e  unique_count
0  3  4  1  3  0             3
1  3  1  4  3  0             2
2  4  3  3  2  1             1
3  3  4  1  4  0             3
4  0  4  3  3  2             2
5  1  2  0  4  1             1
6  3  1  4  2  1             2
7  0  4  3  4  0             2
8  1  3  0  1  1             1
9  3  4  1  2  1             3

关于python - 是否可以在不折叠 Pandas DataFrame 的情况下获得 groupby 样式计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49019320/

相关文章:

pandas - 如何使用 txt 文件制作拼写校正器

python - Pandas 将一个数据框叠加在另一个数据框上

python - Pandas 数据帧矢量化/过滤 : ValueError: Can only compare identically-labeled Series objects

python - 从 DataFrame 的最后一行获取列表

python - Pandas to_sql 尝试为可为 Null 的列建立索引

python - 根据值从 pandas 数据框中的每个单元格中减去

python - 如何取消设置 Protocol Buffer 字段?

python - Tensorflow张量值图

python - pandas 就地应用更新但返回 None

python - 如何填充 Pyplot 线图并根据值更改填充