python - 在 groupby 和操作子数据帧之后保持其他列值不变

标签 python pandas numpy dataframe group-by

我想按 BranchBuyerdfx 进行分组,获取 Quantity 为中间值的行每个子数据帧,并返回最终数据帧。如何在 Date 列中保留相应的值?

dfx:

  Branch Buyer  Quantity                Date
0      A  Carl         1 2013-01-01 13:00:00
1      A  Mark         3 2013-01-01 13:05:00
2      A  Carl         5 2013-10-01 20:00:00
3      A  Carl         1 2013-10-02 10:00:00
4      A   Joe         8 2013-10-01 20:00:00
5      A   Joe         1 2013-10-02 10:00:00
6      A   Joe         9 2013-12-02 12:00:00
7      B  Carl         3 2013-12-02 14:00:00

可重现的示例:

 dfx = pd.DataFrame({'Branch': 'A A A A A A A B'.split(),
   'Buyer': 'Carl Mark Carl Carl Joe Joe Joe Carl'.split(),
   'Quantity': [1, 3, 5, 1, 8, 1, 9, 3],
   'Date': [
   datetime.datetime(2013, 1, 1, 13, 0),
   datetime.datetime(2013, 1, 1, 13, 5),
   datetime.datetime(2013, 10, 1, 20, 0),
   datetime.datetime(2013, 10, 2, 10, 0),
   datetime.datetime(2013, 10, 1, 20, 0),
   datetime.datetime(2013, 10, 2, 10, 0),
   datetime.datetime(2013, 12, 2, 12, 0),
   datetime.datetime(2013, 12, 2, 14, 0)]
   })

使用:

grouped1 = dfx.groupby(['Branch', 'Buyer'])
grouped1['Quantity'].apply(lambda x: x.iloc[0])

返回:

Branch  Buyer
A       Carl     1
        Joe      8
        Mark     3
B       Carl     3
Name: Quantity, dtype: int64

但不保留日期


数量中的中间值的预期输出:

  Branch Buyer  Quantity                Date
0      A  Carl         1 2013-01-01 13:00:00  
1      A  Mark         3 2013-01-01 13:05:00

4      A   Joe         8 2013-10-01 20:00:00

7      B  Carl         3 2013-12-02 14:00:00

对于(A,Carl),只有两个唯一值15,但是1首先出现,所以保留这一行。 (A,Joe)8, 1, 9,因此保留中间值为 8 的行。 (A,Mark)(B,Carl) 总共只有一行,因此保留原始数据。

最佳答案

Groupby Extended

要获取 Quantity 的中间元素,您可以将第一个和最后一个索引除以 2 以获得中间索引。对应于数量的值,您只需指定列名称即可获得日期列,即如上所示的 groupby 之后的日期。

关于python - 在 groupby 和操作子数据帧之后保持其他列值不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62805813/

相关文章:

python - python pandas 根据日期将数据导出到多个excel文件

python - Healpy lmax 的默认格式

python - 过滤二维 numpy 数组

python - 当并非所有行都包含结束日期时,对数据框中的开始日期和结束日期进行数学计算

python - 向数据框中添加几列,计算与其他 3 列相对应的中位数

python - 在python中写入输出文件

python - 具有可变长度多重索引的 pandas 数据框用 NaN 替换值

pandas - 根据每行的列表值对 Pandas 数据帧进行排序

numpy - 如何从距离矩阵中获取点坐标?

python - 将 4d numpy 数组 reshape 为 2d 数组,同时保留数组位置