Python:groupby 聚合中的 2 个(或更多)条件字符串

问题描述 投票:0回答:1

这是我的问题:在我的 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()

谢谢您的帮助。

python pandas string conditional-statements
1个回答
0
投票

如何使用 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”组成的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.