Pandas DataFrame-过滤,汇总,然后分配回原始的预过滤数据集?

时间:2018-06-24 18:52:21

标签: pandas dataframe

我正在尝试找到一种方法,如何获取电子商务数据帧,过滤出一些值,针对每个CustomerID计算汇总指标,然后将其分配回预先过滤的每个CustomerID数据集。

例如-虚拟数据集如下所示:

CustomerID   Month  Value
a                1     10
a                2     20
a                3     20
b                1     30
b                2     40
c                1     80
c                2     90

我想过滤Month列中等于“ 1”的数据集,然后对每个Value计算CustomerID的四分位数,然后将其添加回原始数据集中每个CustomerID

我知道我可以做到这一点,可以通过运行groupby,然后使用quantile函数,然后将值合并回原始数据集,然后运行if-else命令来分别计算四分位数,但是有没有这种请求的方式?

谢谢!

2 个答案:

答案 0 :(得分:2)

这是您需要的吗?

df['quantile.25']=df.loc[df.Month==1,'Value'].quantile(0.25)
df
Out[230]: 
  CustomerID  Month  Value  quantile.25
0          a      1     10         20.0
1          a      2     20         20.0
2          a      3     20         20.0
3          b      1     30         20.0
4          b      2     40         20.0
5          c      1     80         20.0
6          c      2     90         20.0

答案 1 :(得分:1)

使用:

s = df.query('Month == 1').groupby('Customer ID')['Month'].quantile()
df['new'] = df['Customer ID'].map(s)
print (df)
  Customer ID  Month  Value  new
0           a      1     10  1.0
1           a      2     20  1.0
2           a      3     20  1.0
3           b      1     30  1.0
4           b      2     40  1.0
5           c      1     80  1.0
6           c      2     90  1.0

说明

  1. 首先按query进行过滤
  2. 总计DataFrameGroupBy.quantile
  3. 通过map创建新列