簡體   English   中英

Pandas Dataframe 問題:應用函數添加帶有結果的新列

[英]Pandas Dataframe Question: Apply function add new column with results

import pandas as pd

df = pd.DataFrame({'label': 'a a b c b c'.split(), 'Val': [2,2,6, 4,6, 8]})
df

  label  Val
0     a    2
1     a    2
2     b    6
3     c    4
4     b    6
5     c    8

df.groupby('label').apply(lambda x: x.mean())

 Val
label     
a      2.0
b      6.0
c      6.0

我想要這樣的東西。 結果是值除以唯一標簽的平均值:

label  Val  Results
0     a    2    1
1     a    2    1
2     b    6    1
3     c    4    0.6667
4     b    6    1
5     c    8    1.3333

不完全確定該怎么做。 有人有想法嗎? 試過這個但沒有用:

df['Results'] = df.groupby('label').apply(lambda x: x/x.mean())

您已關閉,在groupby之后添加列Val以處理此列:

df['Results'] = df.groupby('label')['Val'].apply(lambda x: x/x.mean())
print (df)
  label  Val   Results
0     a    2  1.000000
1     a    2  1.000000
2     b    6  1.000000
3     c    4  0.666667
4     b    6  1.000000
5     c    8  1.333333

使用GroupBy.transform為由聚合值填充的新Series提高性能的另一個想法,與原始列的大小相同,因此可能划分:

df['Results'] = df['Val'].div(df.groupby('label')['Val'].transform('mean'))

暫無
暫無

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

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