【问题标题】:Count occurences of a row based on multiple conditions根据多个条件计算行的出现次数
【发布时间】:2021-10-24 19:23:13
【问题描述】:

我低于 1000 万条记录的数据集,超过 47 列

name account amount
user1 12345 100$
user2 123456 200$
user1 54321 200$
user2 123456 100$

我需要在这里看到的几件事:

  1. 每个用户和/或每个帐户的金额总和。我相信我已经在下面实现了这一点,看起来还可以
df.groupby(['account','name'])['amount'].sum()
  1. 最活跃的客户和帐户。所以我需要这些数据在一个数据框中,但我没有做到这一点,我只能指定其中一个
df['account'].value_counts().to_frame().reset_index()

这显示了特定帐户在数据集中出现的次数。

account occurence
123456 2
54321 1
12345 1

我需要查看每个帐户的客户名称。 我在下面尝试过,但它不起作用。

df[['account','name']].apply(pd.Series.value_counts)

等于

account name
user1 NaN 2.0
user2 NaN 1.0

我想要的结果如下:

name account amount
user1 12345 100$
54321 200$
user2 123456 300$

我还尝试创建一个单独的数据框,该数据框将包含所有唯一帐户与名称,然后将其与 value_counts 的结果合并,但它没有显示正确的发生次数。

【问题讨论】:

  • 您可以做的是创建一个名为 name_account 的附加列,其中包含连接在一起的名称和帐户。然后使用df.groupby('account_name')['amount'].sum() 对重复项求和。

标签: python pandas numpy


【解决方案1】:

您可以先将 value_counts 的索引存储在变量 (i) 中,然后将帐户列分配为 categoricalordered=True (这将保留value_counts的排序顺序),然后是groupby并与observed=True求和:

i = df['account'].value_counts().index
acc = pd.Categorical(df['account'],i,ordered=True)
out = (df.assign(account=acc)
       .groupby(['name','account'],observed=True)['amount'].sum().to_frame())

print(out)

               amount
name  account        
user1 54321       200
      12345       100
user2 123456      300

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2019-06-11
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多