按 pandas 分组,同时保留所有行和列

问题描述 投票:0回答:1

在此输入图像描述 我的数据框看起来像上面的屏幕截图,没有最后一列。粘贴下面的 print(df)。

ID1 ID2 INTERNAL_ID DDD_OUTLET_ID   SRA_2   SRA_4   Prd_Name    Doses   Data_Available
3   3   C344205     93449151    93449151    ASN        PCV20    30     DDD Level
3   3   C375032     93449151    93449151    ASN        PCV20    30     DDD Level
3   3   C390019     93449151    93449151    ASN        PCV20    30     DDD Level
3   2   C10317637   94002154    94002154    ASN        PCV13    0      DDD Level
3   2   C10350055   94002154    94002154    ASN        PCV13    0      DDD Level
3   2   C10317637   94002154    94002154    ASN        PCV20    90     DDD Level
3   2   C10350055   94002154    94002154    ASN        PCV20    90     DDD Level
3       M990134     85027174    85027174    ASN        PCV13    0      DDD Level
3       M990134     85027174    85027174    ASN        PCV13    0      DDD Level
3       C1007843    85027174    85027174    ASN        PCV13    0      DDD Level
3       C1007843    85027174    85027174    ASN        PCV20    30     DDD Level

我想根据 Assoc ID、SRA_2 和 Prd_Name 对 pandas 中的上述数据进行分组,并在新列“Cnt”中获取每个组的计数,同时保留所有相同的行和列。 所以我从 11x18 形状数据框开始,最终得到 11x19 形状数据框,其中包含来自 group by 的新计数列。

还有其他选择吗?

我正在使用变换,但没有得到想要的结果。

df['Cnt'] = df.groupby(['Assoc_ID', 'SRA_2', 'Prd_Name'])['SRA_2'].transform('count')
python pandas group-by
1个回答
0
投票

您对数据进行分组和计数的代码是正确的,但我在 DataFrame 中没有找到 Assoc_ID 列,没有在文本中找到,也没有在屏幕截图中找到。

尝试使用此代码来测试计数的想法:

import pandas as pd
data = {
    'a': [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3],
    'b': [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3],
    'c': ['X', 'X', 'X', 'Y', 'Y', 'Z', 'Z', 'X', 'X', 'Y', 'Y']
}

df = pd.DataFrame(data)

df['count'] = df.groupby(['a', 'b', 'c'])['c'].transform('count')

print(df)

也许您在计数之前对数据框进行了一些更改,请提供完整的代码以查看是否还有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.