簡體   English   中英

遍歷 Pandas Dataframe 進行基於條件的計算

[英]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 optionB ,然后將填充的NaN值划分回:

注意: DataFrame必須按yearmonthoption首先排序最后一個值,每組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.

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