1

私は初心者で、いくつかの投稿を見てみましたが、これを機能させることができないようです...私が問題だと確信しています。

2 つのデータ セットを組み合わせて圧縮しようとしています。1 つは購入した果物の日付と重量、もう 1 つは過去の日次価格です。これらを週単位でまとめようとしています。

作成しようとしている生データはWeights次のようになります。

Date        Product       Weight
1-1-12      Strawberry     15
1-2-12      Bananna        56
1-2-12      Apple          98
1-5-12      Strawberry    115
1-5-12      Bananna       516
1-5-12      Apple         981

データフレームを作成しようとしたが、シリーズを返すコードは次のとおりです。

df_GrossWeight = pd.read_csv('mydata.csv', encoding='utf-8')
df_GrossWeight_Indexed = df_GrossWeight.set_index(pd.DatetimeIndex(df_GrossWeight['Date']))
grouper = df_GrossWeight_Indexed.groupby([pd.TimeGrouper('W'),'Product'])
Weights = grouper['Weight'].sum()

Pricesこれを、私が作成した毎週の価格を一覧表示するシリーズとマージしたいと考えています。

(datetimeindex)     Product       Price
2012-01-1           Strawberry    2.10
2012-01-1           Banana        0.55
2012-01-1           Apple         1.25

Prices私が使用した作成するコードは次のとおりです。

df_Price = pd.read_csv('Price_Hist.csv')
df_Indexed = df_Price.set_index(pd.DatetimeIndex(df_Price['Date']), drop = True)
df_Price_Indexed = df_Indexed['Price']
Prices = df_Price_Indexed.resample('W').mean()

私が作成しようとしている最後のデータフレームには、毎週の価格と、購入した金額の毎週の合計が含まれます。次のようになります。

  (datetimeindex)       Product       Price     Weight
    2012-01-1           Strawberry    2.10       130
    2012-01-1           Banana        0.55       572
    2012-01-1           Apple         1.25      1079

これは、私が試している方法よりもはるかに簡単に実行できると感じているので、どんな助けも大歓迎です。

前もってありがとう、私

4

2 に答える 2

2

これを行う 1 つの方法は、すべての日付を最も近い平日に「丸める」ことです。この「丸められた」日付を取得したら。2 つのデータフレームを結合できます。

df['Date'] = pd.to_datetime(df['Date'])
df2['(datetimeindex)'] = pd.to_datetime(df2['(datetimeindex)'])

最も近い日曜日に丸める

df2['Week_Sunday'] = df2['(datetimeindex)'] + pd.tseries.offsets.Week(weekday=6)
df['Week_Sunday'] = df.Date + pd.tseries.offsets.Week(weekday=6)

今すぐデータをマージします

df_all = pd.merge(df2, df, on = ['Week_Sunday', 'Product'])
print(df_all)

出力

  (datetimeindex)     Product  Price Week_Sunday       Date  Weight
0      2012-01-01  Strawberry   2.10  2012-01-08 2012-01-01      15
1      2012-01-01  Strawberry   2.10  2012-01-08 2012-01-05     115
2      2012-01-01      Banana   0.55  2012-01-08 2012-01-02      56
3      2012-01-01      Banana   0.55  2012-01-08 2012-01-05     516
4      2012-01-01       Apple   1.25  2012-01-08 2012-01-02      98
5      2012-01-01       Apple   1.25  2012-01-08 2012-01-05     981

グループ化と合計

df_all.groupby(['(datetimeindex)', 'Product', 'Price'], as_index=False)['Weight'].sum()

 (datetimeindex)     Product  Price  Weight
0      2012-01-01       Apple   1.25    1079
1      2012-01-01      Banana   0.55     572
2      2012-01-01  Strawberry   2.10     130
于 2017-03-23T16:10:09.947 に答える