Pandas 如何使用dataframe跨多个列按Id分组
我有df中的数据帧列表Pandas 如何使用dataframe跨多个列按Id分组,pandas,dataframe,concatenation,Pandas,Dataframe,Concatenation,我有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
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)
我明白了
非常感谢您的建议。让我们试试
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
您可以通过
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
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