如何通过对列进行分区来高效地生成此字典?

2024-09-25 18:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧df,如下所示

    parent_id   name
0   t3_35jfjt   t1_cr4y72v
1   t3_35jfjt   t1_cr4y7m7
2   t3_35jfjt   t1_cr4y7p3
3   t1_cr4y72v  t1_cr4y92z
4   t3_35jfjt   t1_cr4y986
... ...         ...

其中name列中的所有元素都是唯一的。我想基于列parent_id对列name进行分区。这意味着name列中的两个元素如果具有相同的parent_id,则属于同一类

然后我想创建一个字典,其键是name列中的元素,其值是这些元素所属类的元素数。比如说,

{'t1_cr4y72v': 3, 't1_cr4y72v': 4,...}

在本例中,t1_cr4y72v属于基数为3的类

我可以使用一个循环来制作这本词典,但它效率不高,因为我有300多万行。你能详细说明一个有效的方法吗

import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/leanhdung1994/WebMining/main/df.csv', header = 0)
df

Tags: csv数据nameid元素dfparentpd
2条回答

以下是一个解决方案:

dict(zip(df.name, df.groupby('parent_id')['parent_id'].transform('count')))

另一个解决方案:

df.merge(
    df.groupby("parent_id")["name"].nunique().rename("cardinality"),
    on="parent_id"
).set_index("name")["cardinality"].to_dict()

相关问题 更多 >