我有一个数据帧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
列中的所有元素都是唯一的。我想创建一个字典,它的键是来自列name
的元素。对于每个这样的键,我们在parent_id
列上计算其频率。如果它没有出现在parent_id
列中,那么这个键的值当然是0
我这样做如下,但它不是有效的,因为我有超过300万行。你能详细说明一种更有效的方法吗
import pandas as pd
import numpy as np
df = pd.read_csv('https://raw.githubusercontent.com/leanhdung1994/WebMining/main/df.csv', header = 0)
# Create df2 to contain the counts
df2 = df.groupby(by = 'parent_id', as_index = False).size()
# Join df2 and df based on column "parent_id"
df3 = pd.merge(df, df2, how = 'left', left_on= 'name', right_on= 'parent_id')
# Replace NaN with 0
df4 = df3.fillna(0).rename(columns = {'size': 'num_siblings'})
df5 = df4[['name', 'num_siblings']]
# My expected dictionary
df5.set_index('name').T.to_dict('records')[0]
是的
{'t1_cr4y72v': 27.0,
't1_cr4y7m7': 26.0,
't1_cr4y7p3': 148.0,
't1_cr4y92z': 0.0,
't1_cr4y986': 43.0,
't1_cr4ya0g': 11.0,
't1_cr4yai8': 1.0,
....
你想要这样的东西吗:
相关问题 更多 >
编程相关推荐