gpt4 book ai didi

python - 如果要计数的值位于另一只 Pandas 数据框中(以一种更快的方式),如何计算值的出现?

转载 作者:行者123 更新时间:2023-12-03 15:53:28 25 4
gpt4 key购买 nike

我有一个(非常大的) Pandas Dataframe df :

country  age  gender
Brazil 10 F
USA 20 F
Brazil 10 F
USA 20 M
Brazil 10 M
USA 20 M

我还有另一个 Pandas Dataframe freq :
 age  gender  counting
10 F 0
10 M 0
20 F 0

当它们出现在 df 中时,我想计算 freq 中的一对值:
 age  gender  counting
10 F 2
10 M 1
20 F 1

我正在使用此代码,但是花费的时间太长:
for row in df.itertuples(index=False):
freq.loc[np.all(freq['age','gender']==row[2:3],axis=1),'counting'] += 1

有更快的方法吗?

请注意:
  • 我必须使用 freq ,因为并非所有组合(例如20和M)都是理想的
  • 不能使用 df 中的某些列
  • count计算两个值在每一行中出现的次数
  • freq可能有两个以上的值要检查(这只是一个小例子)
  • 最佳答案

    您可以使用内部merge过滤掉不需要的df中的组合,然后groupby年龄和性别,并count进行列计数。只需reset_index以适合您的预期输出即可。

    freq = (df.merge(freq, on=['age', 'gender'], how='inner')
    .groupby(['age','gender'])['counting'].size()
    .reset_index())
    print (freq)
    age gender counting
    0 10 F 2
    1 10 M 1
    2 20 F 1

    根据您不希望使用的组合数量,在执行 groupby之前,先在 df上对 merge进行编码可能会更快:
    freq = (df.groupby(['age','gender']).size()
    .rename('counting').reset_index()
    .merge(freq[['age','gender']])
    )

    关于python - 如果要计数的值位于另一只 Pandas 数据框中(以一种更快的方式),如何计算值的出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62201325/

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