简体   繁体   English

Pivot 和 Groupby 与 Pandas

[英]Pivot and Groupby with Pandas

I have the following dataframe:我有以下 dataframe:

DECLARANT   PARTNER PRODUCT PERIOD  VALUE   KG
FR          XC      1001    200501  10      20
FR          XC      1002    200501  11      21
FR          XC      1001    200502  12      22
FR          XC      1002    200502  13      23
FR          XC      1003    200502  14      24

And I want it transformed into something like this:我希望它变成这样的东西:

DECLARANT   PARTNER     PRODUCT  VALUE      KG
FR          XC          1001     [10,12]    [20,22]
FR          XC          1002     [11,13]    [21,23]
FR          XC          1003     [nan,14]   [nan,24]

That is, the VALUE and KG is pivoted based on PERIOD , and if it doesn't exist in the PERIOD it should be replaced with nan .也就是说, VALUEKG基于PERIOD进行旋转,如果PERIOD中不存在,则应将其替换为nan

I've tried pivot and groupby .我试过pivotgroupby But don't seem to get them to work together.但似乎没有让他们一起工作。 This kind-of gives me something but not really what I'm looking for:这种给了我一些东西,但不是我真正想要的:

df.pivot_table(index=['DECLARANT','PARTNER','PRODUCT'],
                                      columns=['PERIOD'],
                                      values=['KG', 'VALUE'])

Use groupby per columns and aggregate list s:每列使用groupby并聚合list

df = (df.pivot_table(index=['DECLARANT','PARTNER','PRODUCT'],
                                      columns=['PERIOD'],
                                      values=['KG', 'VALUE'])
         .groupby(axis=1, level=0)
         .apply(lambda x: x.agg(list, 1)))
print (df)
                                     KG         VALUE
DECLARANT PARTNER PRODUCT                            
FR        XC      1001     [20.0, 22.0]  [10.0, 12.0]
                  1002     [21.0, 23.0]  [11.0, 13.0]
                  1003      [nan, 24.0]   [nan, 14.0]

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

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