簡體   English   中英

具有多個值的分組列

[英]Groupby column with multiple values

我有一個 dataframe 看起來像這樣(一列有多個值,另一列只是帶小數的數字):

food number
apple,tomato,melon 897.0
apple,meat,banana 984.9
banana,tomato 340.8

我想得到每種食物的平均數量。 在示例中將是:

  • 蘋果 = (897.0 + 984.9)/2 = 940.95
  • 香蕉 = (984.9+340.8)/2 = 662.85

依此類推,最終得到一個新的 dataframe,只有食物和平均數量。

food average
apple 915.95
banana 662.85

我用 groupby 試試運氣,但結果一團糟:

#reshape data
df = pd.DataFrame({
    'food' : list(chain.from_iterable(df.food.tolist())), 
    'number' : df.number.repeat(df.food.str.len())
})
# groupby
df.groupby('food').number.apply(lambda x: x.unique().tolist())

我必須說原來的 dataframe 有超過 10 萬行。 謝謝。

使用DataFrame.explode(<column-name>)將列表中的各個項目展開到單獨的單元格中。 他們保留原始索引,因此填寫相應的數字。從那里,這是一個簡單的分組,然后是一個簡單的平均值。

import pandas as pd

df = pd.DataFrame({'food': [['apple', 'tomato', 'melon'], 
                            ['apple','meat', 'banana'],
                            ['banana', 'tomato']], 
                   'number': [897, 984.9, 340.8]})

df.explode('food').groupby('food').mean()

結果是

        number
food          
apple   940.95
banana  662.85
meat    984.90
melon   897.00
tomato  618.90

首先,您必須將字符串列轉換為每個單元格中的列表。 我還包括刪除空格(如果有)的功能。 我從 @9769953 創建的 df 修改

import pandas as pd
df = pd.DataFrame({'food': ["apple,tomato, melon", 
                            "apple,meat,banana,melon",
                            "banana, tomato, melon"], 
                   'number': [897, 984.9, 340.8]})

df['food'] = df['food'].str.split(',').apply(lambda x: [e.strip() for e in x]).tolist()
df.explode('food').groupby('food').agg('mean')

Output

在此處輸入圖像描述

如果您想要更多聚合,可以使用

df.explode('food').groupby('food').agg(['min', 'mean', 'max'])

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM