表之间的条件/过滤方式

2024-04-28 10:56:06 发布

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

我有两个表,在其中一个表中,我希望对一列进行groupby,对于每个组,使用列的值过滤第二个表,然后计算唯一值。这张桌子大约有50万行

我的解决方案: 我正在使用groupby为每个组创建一个循环,其中我列出了感兴趣列的所有值,并使用该列表使用方法isin进行过滤,最后我使用方法值计数

有更好的方法吗

虚拟示例:

In [1]:
year = [2012, 2012, 2012, 2013,2013]
date = [12, 13, 14, 15, 16]
df_year = pd.DataFrame(data=list(zip(year, date)), columns=['year', 'id_event' ])
df_year
 
Out[1]: 
    year    id_event
0   2012    12
1   2012    13
2   2012    14
3   2013    15
4   2013    16
In [2]:
date2 = [12, 12, 13 ,14, 15, 15, 16,20]
client = ['pepe', 'jose',  'jose', 'mara', 'mara','pepe','pepe']
df_client = pd.DataFrame(data=list(zip(date2, client)), columns=['id_event', 'client', ])
df_client
Out[2]: 
    id_event    client
0   12          pepe
1   12          jose
2   13          jose
3   14          mara
4   15          mara
5   15          pepe
6   16          pepe
In [3]:
years = df_year.year.unique()
group_year = df_year.groupby('year')
appearances_years = {}
for i in range(len(years)):
    ids = group_year.get_group(years[i]).id_event.unique()  
    values = df_client.loc[df_client.id_event.isin(ids)].client.value_counts().index
    appearances_years[years[i]]=values
    
appearances_years #Number of appearances of client's in each year
Out[3]: 
Index(['jose', 'pepe', 'mara'], dtype='object')
Index(['pepe', 'mara'], dtype='object')

然后我可以简单地为每年调用value\u counts


Tags: 方法inclienteventiddfgroupout