Вот моя проблема: в моем фрейме данных Pandas «Набор данных» я хотел бы получить следующий результат:
когда столбец «Продукт» хотя бы один раз имеет значение «Ref_01», я хочу получить в результате «XY»
но когда тот же столбец хотя бы один раз имеет значение «Other_Ref», я также хочу получить в результате «ABC»
==> Следовательно, если для одного заданного значения, сгруппированного по «Числу», у нас есть хотя бы один «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()
Спасибо за помощь.






То, как вы используете лямбда-функцию, означает, что вы объединяете пустую строку, и условие перезаписывает любое значение, которое там было изначально. Чтобы добиться того, что вы пытаетесь сделать, вам нужно изменить свой код так, чтобы значения объединялись, а не перезаписывали друг друга, когда оба условия истинны.
Попробуйте этот код
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».