簡體   English   中英

Pandas DataFrame:如何計算價格除以組類別的行數的新列?

[英]Pandas DataFrame: How to calculate a new column with Price divided by number of lines of a group category?

我的 dataframe 有名稱、組、價格列和數據。

價格數據是該組支付的總價格。 我需要為每條線路計算該線路每人的平均價格。

例如,對於 A 組成員,我需要將支付的價格 12 除以該組中的人數:3。

所以 ppp(每人價格)應該是 12/3 = 4

df = pd.DataFrame(
    data = [('Bob', 'A', 12),
            ('Jessica', 'A',12),
            ('Kevin', 'A',12),
            ('Mary', 'B',5),
            ('John', 'C',14),
            ('Mel', 'C',14)
            ],
    columns=['Names', 'Group', 'Price']
)

我試過這個:

a=df.groupby('Group')['Price'].max()
b=df.groupby('Group')['Price'].count()
df.groupby('Group')['Price'].max() / df.groupby('Group')['Price'].count()
ppp = a/b

df['ppp']=0

for a in df.itertuples():
    print(a)
    print(a.Group)
    a.ppp = ppp[a.Group]

但我有一個錯誤:AttributeError:無法設置屬性

預期結果是:

df = pd.DataFrame(
    data = [('Bob', 'A', 12, 4),
            ('Jessica', 'A',12, 4),
            ('Kevin', 'A',12, 4),
            ('Mary', 'B',5, 5),
            ('John', 'C',14, 7),
            ('Mel', 'C',14, 7)
            ],
    columns=['Names', 'Group', 'Price', 'ppp']
)

你能告訴我出了什么問題,以及如果可能的話如何在不迭代的情況下做到這一點?

嘗試transform

a = df.groupby('Group')['Price'].transform('max')
b = df.groupby('Group')['Price'].transform('count')
df['ppp'] = a/b

另一種方法是創建映射並重新分配回原始 dataframe。

請注意,雖然transform更慣用:

mapping = df.groupby("Group").Price.pipe(lambda x: x.max() / x.count())
mapping

Group
A    4.0
B    5.0
C    7.0
Name: Price, dtype: float64


df.assign(ppp=df.Group.map(mapping))

    Names   Group   Price   ppp
0   Bob         A   12  4.0
1   Jessica     A   12  4.0
2   Kevin       A   12  4.0
3   Mary        B   5   5.0
4   John        C   14  7.0
5   Mel         C   14  7.0

這是一個可以正常工作的丑陋解決方案;

df['ppp']=df.apply(lambda row: df.loc[df['Group']==row.Group,'Price'].max()/df.loc[df['Group']==row.Group,'Price'].count(),axis=1)

暫無
暫無

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

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