这是我的问题:在我的 Pandas 数据框“数据集”中,我想得到以下结果:
当“Product”列至少有一次值为“Ref_01”时,我希望结果为“XY”
但是当同一列至少有一次值“Other_Ref”时,我也希望结果是“ABC”
==> 因此,如果对于按“Number”分组的给定,我们至少有一个“Ref_01”和至少有一个“Other_Ref”,我希望得到以下结果:“XY,ABC ”。
但是,使用以下代码,“ABC”替换了“XY”,而不是完成它:
Result = Dataset.groupby(['Number']).agg(Data_Type=('Product',
lambda x: "XY" if (x=='Ref_01').sum() > 0 else "" \
+ "ABC" if (x=='Other_Ref').sum() > 0 else "" )).reset_index()
谢谢您的帮助。
如何使用 lambda 函数意味着您正在连接一个空字符串,并且条件会覆盖原来存在的任何值。为了实现您想要做的事情,您需要更改代码,以便在两个条件都成立时连接这些值,而不是相互覆盖。
试试这个代码
Result = Dataset.groupby(['Number']).agg(Data_Type=('Product', lambda x: "XY" * (x == 'Ref_01').any() + ", ABC" * (x == 'Other_Ref').any())).reset_index()
使用
any()
检查组中是否存在“Ref_01”或“Other_Ref”实例,然后字符串乘法给出空字符串或您想要的由“XY,ABC”组成的字符串。