当我使用计数重新采样某些数据时,我从Series
创建了DataFrame
像这样:H2
是DataFrame
:
H3=H2[['SOLD_PRICE']]
H5=H3.resample('Q',how='count')
H6=pd.rolling_mean(H5,4)
这产生了一系列如下:
1999-03-31 SOLD_PRICE NaN
1999-06-30 SOLD_PRICE NaN
1999-09-30 SOLD_PRICE NaN
1999-12-31 SOLD_PRICE 3.00
2000-03-31 SOLD_PRICE 3.00
索引如下:
MultiIndex
[(1999-03-31 00:00:00, u'SOLD_PRICE'), (1999-06-30 00:00:00, u'SOLD_PRICE'), (1999-09-30 00:00:00, u'SOLD_PRICE'), (1999-12-31 00:00:00, u'SOLD_PRICE'),.....
我不希望第二列作为索引。理想情况下,我有一个DataFrame
,第1列为“Date”,第2列为“Sales”(删除索引的第二级)。我不太清楚如何重新配置索引。
答案 0 :(得分:33)
只需致电reset_index()
:
In [130]: s
Out[130]:
0 1
1999-03-31 SOLD_PRICE NaN
1999-06-30 SOLD_PRICE NaN
1999-09-30 SOLD_PRICE NaN
1999-12-31 SOLD_PRICE 3
2000-03-31 SOLD_PRICE 3
Name: 2, dtype: float64
In [131]: s.reset_index()
Out[131]:
0 1 2
0 1999-03-31 SOLD_PRICE NaN
1 1999-06-30 SOLD_PRICE NaN
2 1999-09-30 SOLD_PRICE NaN
3 1999-12-31 SOLD_PRICE 3
4 2000-03-31 SOLD_PRICE 3
有很多方法可以删除列:
两次致电reset_index()
并指定一栏:
In [136]: s.reset_index(0).reset_index(drop=True)
Out[136]:
0 2
0 1999-03-31 NaN
1 1999-06-30 NaN
2 1999-09-30 NaN
3 1999-12-31 3
4 2000-03-31 3
重置索引后删除列:
In [137]: df = s.reset_index()
In [138]: df
Out[138]:
0 1 2
0 1999-03-31 SOLD_PRICE NaN
1 1999-06-30 SOLD_PRICE NaN
2 1999-09-30 SOLD_PRICE NaN
3 1999-12-31 SOLD_PRICE 3
4 2000-03-31 SOLD_PRICE 3
In [139]: del df[1]
In [140]: df
Out[140]:
0 2
0 1999-03-31 NaN
1 1999-06-30 NaN
2 1999-09-30 NaN
3 1999-12-31 3
4 2000-03-31 3
重置后调用drop()
:
In [144]: s.reset_index().drop(1, axis=1)
Out[144]:
0 2
0 1999-03-31 NaN
1 1999-06-30 NaN
2 1999-09-30 NaN
3 1999-12-31 3
4 2000-03-31 3
然后,在重置索引后,只需重命名列
In [146]: df.columns = ['Date', 'Sales']
In [147]: df
Out[147]:
Date Sales
0 1999-03-31 NaN
1 1999-06-30 NaN
2 1999-09-30 NaN
3 1999-12-31 3
4 2000-03-31 3
答案 1 :(得分:13)
使用双括号时,例如
H3 = H2[['SOLD_PRICE']]
H3成为DataFrame。如果使用单括号,
H3 = H2['SOLD_PRICE']
然后H3成为一个系列。如果H3是一个系列,那么你想要的结果自然而然:
import pandas as pd
import numpy as np
rng = pd.date_range('1/1/2011', periods=72, freq='M')
H2 = pd.DataFrame(np.arange(len(rng)), index=rng, columns=['SOLD_PRICE'])
H3 = H2['SOLD_PRICE']
H5 = H3.resample('Q', how='count')
H6 = pd.rolling_mean(H5,4)
print(H6.head())
产量
2011-03-31 NaN
2011-06-30 NaN
2011-09-30 NaN
2011-12-31 3
2012-03-31 3
dtype: float64