我有一个如下所示的数据框:
org date value
0 00C 2013-04-01 0.092535
1 00D 2013-04-01 0.114941
2 00F 2013-04-01 0.102794
3 00G 2013-04-01 0.099421
4 00H 2013-04-01 0.114983
现在我想弄清楚:
在熊猫中接近这个的最佳方法是什么?
我试图按月生成中位数,但是它失败了:
df['date'] = pd.to_datetime(df['date'])
ave = df.groupby(['row_id', 'date.month']).median()
KeyError: 'date.month'
失败。
更新:感谢@EdChum,我现在正在做:
ave = df.groupby([df['row_id'], df['date'].dt.month]).median()
效果很好并且给了我:
99P 1 0.106975
2 0.091344
3 0.098958
4 0.092400
5 0.087996
6 0.081632
7 0.083592
8 0.075258
9 0.080393
10 0.089634
11 0.085679
12 0.108039
99Q 1 0.110889
2 0.094837
3 0.100658
4 0.091641
5 0.088971
6 0.083329
7 0.086465
8 0.078368
9 0.082947
10 0.090943
11 0.086343
12 0.109408
现在我想,对于索引中的每个项目,我需要找到最小和最大计算值,然后找出它们之间的差异。最好的方法是什么?
答案 0 :(得分:2)
对于您的第一个错误,您有语法错误,您可以传递列名列表或列本身,您传递了一个名称列表,date.month
不存在,所以您想要:
ave = df.groupby([df['row_id'], df['date'].dt.month]).median()
之后,您可以针对特定索引级别计算min
和max
,以便:
((ave.max(level=0) - ave.min(level=0))/ave.max(level=0)) * 100
应该给你你想要的东西。
计算每个组织的最小值和最大值之间的差异,除以该级别的最大值,并通过乘以100来创建百分比