pandas,具有多个条件的切片多索引df

时间:2016-03-24 20:54:13

标签: python pandas indexing slice object-slicing

这个问题是pandas re-indexing with missing dates

的延续

我想计算最近3个月(2015-12,2015-11,2015-10)的价值总和。如果股票没有足够的数据,即3个月中没有1个或2个,那么我希望该金额的值为NaN。

我可以切分并执行分组和总结,但是这并没有给我我想要的东西,因为它可能排除了在这三个月内没有任何数据然后没有账户的股票对于有1个月或2个月的股票。

我想我需要一个多地方声明,但我已经修好了,但却无法得到我想要的结果。

df2.loc[idx[:,datetime.date(2015,10,1):datetime.date(2015,12,1)],:].groupby(level=0).sum()

2 个答案:

答案 0 :(得分:0)

试试这个:

In [141]: df.loc[12] = [7, pd.to_datetime('2015-12-02'), 'amzn']

注意:我故意在您的DF中添加一行,以便至少有一个月有一行以上

$name = filter_input(INPUT_POST, 'name');

答案 1 :(得分:0)

更新

使用以下数据框:

df = pd.DataFrame({
'value' : [4,2,5,6,7,8,6,5,4,1,2,4],
'date': fread_year_month(dt.datetime(2015, 1, 1),dt.datetime(2015, 12, 1)),
'stock': ['amzn']*12
},columns=[
'value', 'date', 'stock'] )

df2 = pd.DataFrame({
'value' : [1]*11,
'date': fread_year_month(dt.datetime(2015, 1, 1),dt.datetime(2015, 11, 1)),
'stock': ['msft']*11
},columns=[
'value', 'date', 'stock'] )

df = df.append(df2)

df.set_index(['stock', 'date'], inplace=True)

我做了以下事情:

In [1]: idx = pd.IndexSlice
​In [2]: criterion = df.loc[idx[:,'2015-10-01':'2015-12-01'],:].\
groupby(level=0).agg(['count']) > 2
In [3]: criterion = criterion['value']['count']
In [4]: df2 = df.loc[idx[:,'2015-10-01':'2015-12-01'],:].groupby(level=0).sum()
​In [5]: df3 = pd.DataFrame(columns=['value'], index=criterion[criterion==False].index)
In [6]: df2[criterion].append(df3, ignore_index=False)

Out[6]:
value
stock   
amzn    7
msft    NaN

在此示例中,MSFT没有2015-12的数据(3个月中只有2个),因此根据我的要求将其值设置为NaN。