通过按 python 中数据框列中的值分组来创建字典
Posted
技术标签:
【中文标题】通过按 python 中数据框列中的值分组来创建字典【英文标题】:Create a dictionary by grouping by values from a dataframe column in python 【发布时间】:2018-01-22 15:20:02 【问题描述】:我有一个 7 列的数据框,如下:
Bank_Acct Firstname | Bank_Acct Lastname | Bank_AcctNumber | Firstname | Lastname | ID | Date1 | Date2
B1 | Last1 | 123 | ABC | EFG | 12 | Somedate | Somedate
B2 | Last2 | 245 | ABC | EFG | 12 | Somedate | Somedate
B1 | Last1 | 123 | DEF | EFG | 12 | Somedate | Somedate
B3 | Last3 | 356 | ABC | GHI | 13 | Somedate | Somedate
B4 | Last4 | 478 | XYZ | FHJ | 13 | Somedate | Somedate
B5 | Last5 | 599 | XYZ | DFI | 13 | Somedate | Somedate
我想创建一个字典:
ID1: (Count of Bank_Acct Firstname, Count of distinct Bank_Acct Lastname,
Bank_AcctNumber1 : ItsCount, Bank_AcctNumber2 : ItsCount,
Count of distinct Firstname, Count of distinct Lastname),
ID2: (...),
对于上面的例子:
12: (2, 2, 123: 2, 245: 1, 2, 1), 13 : (3, 3, 356: 1, 478: 1, 599: 1, 2, 3)
下面是代码:
cols = ['Bank First Name', 'Bank Last Name' 'Bank AcctNumber', 'First Name', 'Last Name']
df1 = df.groupby('ID').apply(lambda x: tuple(x[c].nunique() for c in cols))
d = df1.to_dict()
但上面的代码只给出了输出:
12: (2, 2, 2, 2, 1), 13 : (3, 3, 3, 2, 3)
给出不同银行账户号码的计数,而不是内部字典。
如何获取所需的字典?谢谢!!
【问题讨论】:
【参考方案1】:您可以在列表中定义列和函数
In [15]: cols = [
...: 'col': 'Bank_Acct Firstname', 'func': pd.Series.nunique,
...: 'col': 'Bank_Acct Lastname', 'func': pd.Series.nunique,
...: 'col': 'Bank_AcctNumber', 'func': lambda x: x.value_counts().to_dict(),
...: 'col': 'Firstname', 'func': pd.Series.nunique,
...: 'col': 'Lastname', 'func': pd.Series.nunique
...: ]
In [16]: df.groupby('ID').apply(lambda x: tuple(c['func'](x[c['col']]) for c in cols))
Out[16]:
ID
12 (2, 2, 123: 2, 245: 1, 2, 1)
13 (3, 3, 356: 1, 478: 1, 599: 1, 2, 3)
dtype: object
In [17]: (df.groupby('ID')
.apply(lambda x: tuple(c['func'](x[c['col']]) for c in cols))
.to_dict())
Out[17]:
12: (2, 2, 123: 2, 245: 1, 2, 1),
13: (3, 3, 356: 1, 478: 1, 599: 1, 2, 3)
【讨论】:
这可行,但速度极慢。有什么方法可以让这更快吗?我有一个巨大的数据框。以上是关于通过按 python 中数据框列中的值分组来创建字典的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark 通过使用另一列中的值替换 Spark 数据框列中的字符串
Python pandas 通过对现有列进行分组来创建其他数据框列
数据框列中的嵌套列表,提取数据框列中列表的值 Pyspark Spark