gpt4 book ai didi

python - 在Python中按数据帧的列中的每个值进行分组

转载 作者:行者123 更新时间:2023-11-30 22:32:02 26 4
gpt4 key购买 nike

我有一个包含 7 列的数据框,如下所示:

Bank Name | Number | Firstname | Lastname | ID | Date1    | Date2
B1 | 1 | ABC | EFG | 12 | Somedate | Somedate
B2 | 2 | ABC | EFG | 12 | Somedate | Somedate
B1 | 1 | DEF | EFG | 12 | Somedate | Somedate
B3 | 3 | ABC | GHI | 13 | Somedate | Somedate
B4 | 4 | XYZ | FHJ | 13 | Somedate | Somedate
B5 | 5 | XYZ | DFI | 13 | Somedate | Somedate

我想创建一个元组,每个元组包含 4 个元素 ID ,这样每个元组元素代表 (Bank Name, Number, Firstname, Lastname)对于每个 ID这些元组元素的值是该 ID 的相应列中存在的不同元素的计数。例如:对于ID = 12 ,元组应该是 (2, 2, 2, 1)ID=13,元组应该是 (3, 3, 2, 3)

我可以通过执行以下操作来获取特定 ID 的所有行:

print(df.loc[df['ID'] == '12'])

但是,我不知道如何对 ID 列中的每个值执行此操作(很像 SQL 中的 group by 子句,并且还获取计数而不是行中的实际值。

请帮忙。

最佳答案

使用apply你可以这样做

In [117]: cols = ['BankName', 'Number', 'Firstname', 'Lastname']

In [126]: df.groupby('ID')[cols].nunique().apply(tuple, axis=1)
Out[126]:
ID
12 (2, 2, 2, 1)
13 (3, 3, 2, 3)
dtype: object

或者,

In [127]: df.groupby('ID').apply(lambda x: tuple(x[c].nunique() for c in cols))
Out[127]:
ID
12 (2, 2, 2, 1)
13 (3, 3, 2, 3)
dtype: object

或者,如果您想要作为数据框而不是元组

In [122]: df.groupby('ID').agg({c: 'nunique' for c in cols})
Out[122]:
Lastname Number Firstname BankName
ID
12 1 2 2 2
13 3 3 2 3

or,

In [123]: df.groupby('ID')[cols].nunique()
Out[123]:
BankName Number Firstname Lastname
ID
12 2 2 2 1
13 3 3 2 3

关于python - 在Python中按数据帧的列中的每个值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45620903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com