[英]Iterating Through Pandas Dataframe to Calculate based on Conditions
對於下面的 DataFrame,我需要為每年和每月創建一個新列“unit_count”,即“unit”/“count”。 但是,因為每個年份和月份都不是唯一的,對於每個條目,我只想使用 B 選項中給定月份的計數。
key UID count month option unit year
0 1 100 1 A 10 2015
1 1 200 1 B 20 2015
2 1 300 2 A 30 2015
3 1 400 2 B 40 2015
本質上,我需要一個執行以下操作的函數:
unit_count = df.unit / df.count
對於單位值,但在給定的“月份”中僅使用選項“B”的“計數”值。
因此,最終結果將如下表所示,其中 unit_count 將單位數除以給定月份的“扇區”“B”的計數。
key UID count month option unit year unit_count
0 1 100 1 A 10 2015 0.05
1 1 200 1 B 20 2015 0.10
2 1 300 2 A 30 2015 0.075
3 1 400 2 B 40 2015 0.01
這是我用來創建原始 DataFrame 的代碼:
df = pd.DataFrame({'UID':[1,1,1,1],
'year':[2015,2015,2015,2015],
'month':[1,1,2,2],
'option':['A','B','A','B'],
'unit':[10,20,30,40],
'count':[100,200,300,400]
})
似乎您可以先創建NaN
,其中 not option
是B
,然后將填充的NaN
值划分回:
注意: DataFrame
必須按year
、 month
和option
首先排序最后一個值,每組B
#if necessary in real data
#df.sort_values(['year','month', 'option'], inplace=True)
df['unit_count'] = df.loc[df.option=='B', 'count']
print (df)
UID count month option unit year unit_count
0 1 100 1 A 10 2015 NaN
1 1 200 1 B 20 2015 200.0
2 1 300 2 A 30 2015 NaN
3 1 400 2 B 40 2015 400.0
df['unit_count'] = df.unit.div(df['unit_count'].bfill())
print (df)
UID count month option unit year unit_count
0 1 100 1 A 10 2015 0.050
1 1 200 1 B 20 2015 0.100
2 1 300 2 A 30 2015 0.075
3 1 400 2 B 40 2015 0.100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.