首页 > 解决方案 > Pandas 数据框转换

问题描述

考虑一个如下所示的数据框:

             A        B        C
0   2018-10-13      100       50
1   2018-10-13      200       25
2   2018-10-13      300       10
3   2018-10-13      400        5
4   2018-10-13      500        0
5   2018-10-14      100      100
6   2018-10-14      200       50
7   2018-10-14      300       25
8   2018-10-14      400       10
9   2018-10-14      500        5
10  2018-10-15      100      150
11  2018-10-15      200      100
12  2018-10-15      300       50
13  2018-10-15      400       25
14  2018-10-15      500       10

我要执行的转换是:

  1. GroupBy A 列
  2. 然后 GroupBy 列 B 分成 3 个区间( [0,100] 说intval-1, [101,200] 说intval-2, [201,end] 说intval-3 ]。可以是 n 个区间来概括。
  3. 对 C 列执行求和聚合

所以我的转换/旋转数据框应该像

             A  intval-1  intval-2  intval-3
0   2018-10-13        50        25        15
1   2018-10-14       100        50        40
2   2018-10-13       150       100        85

实现这一点的简单方法将有很大帮助。

谢谢你。

标签: pythonpandaspandas-groupby

解决方案


你可以cut,然后pivot_table

bin_lst = [0, 100, 200, np.inf]

cut_b = pd.cut(df['B'], bins=bin_lst,
               labels=[f'intval-{i}' for i in range(1, len(bin_lst))])

res = df.assign(B=cut_b)\
        .pivot_table(index='A', columns='B', values='C', aggfunc='sum')

print(res)

B           intval-1  intval-2  intval-3
A                                       
2018-10-13        50        25        15
2018-10-14       100        50        40
2018-10-15       150       100        85

推荐阅读