2017-10-13 63 views
2

我上一個數據幀DF使用df.describe()導致:比較2個dataframes得到另一個數據幀

Index count    mean   std   min   25%   max 
ABC  6    5.14   4.63    1    2   12 
CDE  6    18.6   12.5    2   7.5   15 
DEF  7    30.2   32.6    1   6.5   20 

另據幀DF2

Index    Date  eventName eventCount 
0   2017-08-09    ABC   24 
1   2017-08-09    CDE   140 
2   2017-08-10    CDE   150 
3   2017-08-11    DEF   200 

門檻列應該是計算公式如下:

例如,對於eventName:ABC使用日期:2017-08-09(每日)在數據框中df2作爲此新數據幀中的新索引,日期的偏差百分比爲:2017-08-09要存儲在這個新的數據幀將在EVENTCOUNT列在數據幀代表ABC DF2的值:其是24減去在數據幀DF 其中是代表ABC 1 分鐘列中的值太:24-1 = 23,然後除以ABC的eventCount值df2 *(100),即23/24 * 100 = 95%

生成的(新)數據幀應該如下所示:

 Index   eventName eventCount  threshold  min 
2017-08-09    ABC   24  Under 95%   1 
2017-08-09    CDE   140  Under 98.5%   2 
2017-08-10    CDE   150  Under 99.3%   2 
2017-08-11    DEF   200  Under 99.5%   1 

我已經卡住了,我該怎麼辦?

+0

*我被困已經* ......堅持了什麼?你的嘗試代碼在哪裏? SO不是代碼寫入服務。 – Parfait

回答

2

使用join(默認left)爲增加新的列,然後一些算術運算:

df = df2.set_index('Date').join(df[['min']], on='eventName', how='left') 
df['threshold'] = df['eventCount'].sub(df['min']).div(df['eventCount']).mul(100).round(2) 
#if need preix with % 
df['threshold1'] =(df['eventCount'].sub(df['min']) 
            .div(df['eventCount']) 
            .mul(100) 
            .apply("Under {0:.2f}%".format)) 
print (df) 

      eventName eventCount min threshold threshold1 
Date               
2017-08-09  ABC   24 1  95.83 Under 95.83% 
2017-08-09  CDE   140 2  98.57 Under 98.57% 
2017-08-10  CDE   150 2  98.67 Under 98.67% 
2017-08-11  DEF   200 1  99.50 Under 99.50% 
+0

好的答案,但如果OP試圖解決這個複雜的爭論和計算,本來會很好。下次發送鏈接和您的小時費率!有時我們的回答者會喜歡有趣的問題,但會傷害學習過程。 – Parfait

+0

@Parfait的好建議。我曾嘗試過一些東西,但它遠不及我想我可以發佈的東西。我需要答案才能讓我朝正確的方向發展。 – Bode