我在数据框 df 上使用了df.describe( )
,结果是:
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 ,使用数据框 df2 中的日期:2017-08-09(每日)作为此新数据框中的新索引,偏差百分比对于日期:2017-08-09将存储在此新数据框中将是 eventCount 列中的值,表示数据框 df2 中的ABC:这是24减去数据框 df 中的 min 列,其中1表示ABC:24-1 = 23,然后除以 df2中的ABC的eventCount值 *( 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 :(得分: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%