繁体   English   中英

熊猫数据框转换

[英]Pandas Dataframe Transformations

考虑如下数据帧:

             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. 按栏分组
  2. 然后将B列的GroupB分为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

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

谢谢。

您可以先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

使用pd.cutgroupby + unstack

df.B=pd.cut(df.B,bins=[0,100,200,np.inf],labels=['intval-1','intval-2','intval-3'])
df.groupby(['A','B']).C.sum().unstack()
Out[35]: 
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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM