我有一个简单的数据框架如下:
>>> df
median quarter status
0 240 2014-1 BV
1 300 2014-2 BV
2 240 2014-3 BV
3 450 2014-4 BV
4 300 2014-1 CORR
5 240 2014-2 CORR
6 300 2014-3 CORR
7 420 2014-4 CORR现在,我只想为year.So中的前两个季度过滤值--我这样做:
>>> df[df['quarter'].isin(['2014-1','2014-2'])]
median quarter status
0 240 2014-1 BV
1 300 2014-2 BV
4 300 2014-1 CORR
5 240 2014-2 CORR现在我想找出这两个季度的中位数之间的百分比变化,所以我这样做:
>>> df['median'].pct_change()
0 NaN
1 0.25
2 0.00
3 -0.20
Name: median, dtype: float64然而,我真正需要的只是两个季度之间的百分比变化,以及这样的状况:
>>> df
pc_change status
0 25 BV
1 -20 CORR我该怎么做?
发布于 2015-09-09 22:25:43
一个简单的pandas.DataFrame.query可能适合您的需要。在您的测试数据中,这并不重要,但您也希望确保状态的排序
df.sort( 'status', inplace=True)
df['change'] = df['median'].pct_change()
# median quarter status change
#0 240 2014-1 BV NaN
#1 300 2014-2 BV 0.25
#2 300 2014-1 CORR 0.00
#3 240 2014-2 CORR -0.20
df.query( 'quarter=="2014-2"')
# median quarter status change
#1 300 2014-2 BV 0.25
#3 240 2014-2 CORR -0.20发布于 2015-09-09 22:23:03
你基本上是想做一个枢轴表。要做到这一点,一个简单的方法是将索引设置为季度和状态,然后打开堆栈状态:
df = df[df['quarter'].isin(['2014-1','2014-2'])]
df_qtr = df.set_index(['quarter', 'status']).unstack('status')
>>> df_qtr
median
status BV CORR
quarter
2014-1 240 300
2014-2 300 240不,你可以很容易地得到百分之零钱:
>>> df_qtr.pct_change()
median
status BV CORR
quarter
2014-1 NaN NaN
2014-2 0.25 -0.2https://stackoverflow.com/questions/32489735
复制相似问题