【问题标题】:How to group by the value of the dataframe?如何按数据框的值分组?
【发布时间】:2019-08-20 15:23:34
【问题描述】:

我有这 2 个 df 基本相同,但在 df1 中,值是各个客户的付款金额,另一个是该期间的客户状态(第 1、2、3、4 列是句号):

df1:

customer|1|2|3|4
x       |2|5|5|5
y       | |5|5|5
z       |5|5|5|

df2:

customer|1|2|3|4
x       |N|E|E|E
y       | |N|E|E
z       |N|E|C|-

我想按 df2 的值的状态进行分组:

Status  1 |2 |3 |4
N        7|5 |  |
E         |10|10|10
C         |  |5 |

我曾经使用过对状态计数进行分组

df2.apply(pd.value_counts).fillna(0)

但现在,我想 SUM 相应数据框的值 DF1 而不是 count

【问题讨论】:

  • 你能改变你的数据生成,以便我可以确保我理解 DataFrame 吗?我不确定为什么您的数据中有缺失值和“-”。那些应该是NaN吗?以下是否:df1 = pandas.DataFrame({1:[2,0,5], 2:[5,5,5], 3:[5,5,5], 4:[5,5,0]}, index=['x', 'y', 'z']) 代表您正在处理的 DataFrame?
  • 这些是我看到的数据透视表。有没有办法分享您使用的原始表格?
  • 空格和'-'是NaN。其实并不代表。这只是一个例子
  • 这两个数据框的一个例子i.imgur.com/R1L9L0A.png
  • 您的数据位于jupyter notebook。请执行print(df1.head(10))print(df2.head(10)) 并将其输出复制粘贴到您的问题中。该输出对我们来说是可复制的,我们可以用它来回答您的问题。谢谢

标签: python pandas pivot-table pandas-groupby


【解决方案1】:

通常,这似乎很困难,因为您的 DataFrame 形状很奇怪。如果您首先melt 他们,这将变得很容易:只需merge 他们,groupby 您感兴趣的数量并将它们相加(如果您想以该格式显示,请再次pivot):

df1m = df1.melt(id_vars='customer', var_name='period', value_name='amount')
df2m = df2.melt(id_vars='customer', var_name='period', value_name='status')
dfm = df1m.merge(df2m)
res = dfm.groupby(['status', 'period'])['amount'].sum().reset_index()
res.pivot_table(index='status', columns='period')

#period      1     2     3     4
#status                         
#C         NaN   NaN   5.0   NaN
#E         NaN  10.0  10.0  10.0
#N         7.0   5.0   NaN   NaN

为了展示 melt 的作用:它对 DataFrame 进行反透视,因此每个观察(客户、期间)都有一行具有数量/状态

df1m
#    customer period  amount
#0   x             1     2.0
#1   y             1     NaN
#2   z             1     5.0
#3   x             2     5.0
#4   y             2     5.0
#5   z             2     5.0
#6   x             3     5.0
#7   y             3     5.0
#8   z             3     5.0
#9   x             4     5.0
#10  y             4     5.0
11  z             4     NaN

【讨论】:

  • 我知道这很奇怪,但它非常适合我使用的按计数分组的目的,现在我正在尝试重用它,我也仍然认为它比原始数据库
  • 当然,可视化效果很好。但是,通过操作,您通常会想要使用 Tidy Data:vita.had.co.nz/papers/tidy-data.pdf。无论如何,希望它有所帮助
  • 但令人惊讶的是,我不知道融化方法非常令人印象深刻!
猜你喜欢
  • 2017-10-17
  • 2019-04-15
  • 1970-01-01
  • 2017-08-31
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
相关资源
最近更新 更多