0

この質問は、日付が欠落しているパンダの再インデックスの続きです

直近 3 か月 (2015-12、2015-11、2015-10) の値の合計を計算したいと考えています。株式に十分なデータがない場合、つまり 3 か月のうちの 1 か月または 2 か月がない場合、その合計の値を NaN にしたいと考えています。

スライスして group by と sum を実行することはできますが、この 3 か月間にデータがなかった株式を除外した可能性があり、1 つまたは 2 つの株式を考慮していない可能性があるため、これは私が望むものではありません。月。

マルチ loc ステートメントが必要だと思いますが、いじくり回して、必要な結果を得ることができませんでした。

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

2 に答える 2

0

Update:

Using the following data frame:

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)

I did the following:

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

In this example MSFT did not have data for 2015-12 (it had only 2 of the 3 months) so its value was set to NaN as per my requirement.

于 2016-03-29T01:47:07.987 に答える