全部,
我有以下 pd.DataFrame():
df = pd.DataFrame({'fruit': ['carrot','carrot','apple','apple', 'tomato'],
'taste': ['sweet','sweet','sweet','bitter','bitter'],
'quality': ['good','poor','rotten','good','good']})
看起來像這樣:
fruit taste quality
0 carrot sweet good
1 carrot sweet poor
2 apple sweet rotten
3 apple bitter good
4 tomato bitter good
我像這樣應用 grouby 和 agg:
df.groupby('fruit').agg(pd.Series.tolist)
生產:
taste quality
fruit
apple [sweet, bitter] [rotten, good]
carrot [sweet, sweet] [good, poor]
tomato [bitter] [good]
但我想要的是:
taste quality
fruit
apple [sweet, bitter] [rotten, good]
carrot sweet [good, poor]
tomato bitter good
換句話說:我只想聚合具有多個不同值的條目,但是當串列只包含相同的唯一專案時,我希望它只包含所述專案。有沒有一種很好的方法來做到這一點(最好不要通過df的所有單元格,我的相當大,但也許這是唯一的方法?)?抱歉,如果我不清楚,我很難用語言表達這一點(因此標題也很困難)。
先感謝您。
uj5u.com熱心網友回復:
使用自定義 lambda 函式通過sets 洗掉重復項,并將唯一值轉換為標量:
f = lambda x: list(set(x)) if len(set(x)) > 1 else x.iat[0]
df = df.groupby('fruit').agg(f)
print (df)
taste quality
fruit
apple [sweet, bitter] [rotten, good]
carrot sweet [poor, good]
tomato bitter good
如果訂購很重要:
f = lambda x: list(dict.fromkeys(x)) if len(set(x)) > 1 else x.iat[0]
df = df.groupby('fruit').agg(f)
print (df)
taste quality
fruit
apple [sweet, bitter] [rotten, good]
carrot sweet [good, poor]
tomato bitter good
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450869.html
