【问题标题】:How to group by Id across multiple columns with pandas dataframe如何使用熊猫数据框在多列中按 ID 分组
【发布时间】:2021-07-10 01:12:08
【问题描述】:

我在 df 中有一个数据框列表

dataframe 1:
ID  Name Coupon Description Coupon_Type
100 FXC    2.5  Foo Foo     Fixed
100 FXC    1.5  Foo Foo     Floating
200 MNY    1.0  Man Man     Fixed
300 ABC    2.5  Arm T        Fixed
300 ABC    3.0  Arm M        Fixed
300 ABC    2.5  Arm T        Fixed

dataframe2:
ID  Name Index_Linked
100 FXC  Y
300 ABC  N

试图得到这样的结果数据帧

ID  Name Coupon        Description    Coupon_Type      Index_Linked
100 FXC [2.5,1.5]      Foo Foo        [Fixed, Floating]  Y
200 MNY 1.0            Man Man        Fixed
300 ABC [2.5,3.0]      [Arm T, Arm M] Fixed              N

如果我尝试


df_final=pd.concat(df, ignore_index=True)

我明白了

ID  Name Coupon Description Coupon_Type Index_Linked
100 FXC    2.5  Foo Foo     Fixed
100 FXC    1.5  Foo Foo     Floating
100 FXC                                    Y
200 MNY    1.0  Man Man     Fixed
300 ABC    2.5  Arm T       Fixed
300 ABC    3.0  Arm M       Fixed
300 ABC    2.5  Arm T       Fixed
300 ABC                                    N

非常感谢任何建议。

【问题讨论】:

    标签: pandas dataframe concatenation


    【解决方案1】:

    你可以通过groupby()方法、agg()方法和merge()方法来做到这一点:

    resultdf=df1.groupby(['ID','Name'],as_index=False).agg(lambda x : list(set(x))[0] if len(list(set(x)))==1 else list(set(x))).merge(df2,how='left')
    

    现在,如果您打印 resultdf,您将获得所需的输出:

        ID      Name    Coupon      Description     Coupon_Type         Index_Linked
    0   100     FXC     [1.5, 2.5]  Foo Foo         [Fixed, Floating]       Y
    1   200     MNY     1.0         Man Man         Fixed                   NaN
    2   300     ABC     [2.5, 3.0]  [Arm T, Arm M]  Fixed                   N
    

    【讨论】:

      【解决方案2】:

      让我们试试

      out = df1.groupby(['ID','Name']).agg(lambda x : set(x)).reset_index().merge(df2,how='left')
      Out[86]: 
          ID Name      Coupon   Description        Coupon_Type Index_Linked
      0  100  FXC  {1.5, 2.5}      {FooFoo}  {Floating, Fixed}            Y
      1  200  MNY       {1.0}      {ManMan}            {Fixed}          NaN
      2  300  ABC  {2.5, 3.0}  {ArmT, ArmM}            {Fixed}            N
      

      【讨论】:

        猜你喜欢
        • 2020-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        • 2017-10-17
        • 2019-10-14
        • 1970-01-01
        • 2018-07-19
        相关资源
        最近更新 更多