4

この質問のより正確なタイトルに関するヘルプは大歓迎です..

pandas日付と、その日に顧客が消費したアイテムを記録する顧客レベルの観察を含むデータフレームがあります。このように見えます。

df
store    day   items
 a        1     4
 a        1     3
 a        2     1
 a        3     5
 a        4     2 
 a        5     9
 b        1     1 
 b        2     3

このデータ セットの各観察結果は、一意の店舗日の組み合わせに関連していますが、各店舗日の観察結果は、消費されたアイテムの数が正の場合、つまりdf[items] > 0すべての店舗日の組み合わせを条件としてリストされています。

だから私は持っていません、例えば

b         3      0
b         4      0 
b         5      0

storeこのデータフレームをとdayでグループ化し、各 store-day グループのすべての obs に対していくつかの操作を実行する必要があります。

しかし、これらの行を長さ 0 (null セット) で存在させたいのですが、これを行う最善の方法がわかりません。これは非常に単純なおもちゃのデータセットです。実物はとても大きいです。

df.groupby(['store', 'day'])特定の店舗と日に記録された顧客数の尺度として、各グループの長さを使用する各店舗日グループで OTHER 計算を実行するため、 を使用する前に観察を追加したくありません。したがって、これらの観察b3とを追加するとb4、3 日目と 4 日目に店 b を訪れた 2 人の顧客がいたように見えますが、客はいませんでした (3 日目と 4 日目に店 b で何も買わなかった)。

4

3 に答える 3

1

私のような他の誰かが答えを探している場合に備えて、あなたはすでにあなたの質問に対する答えを持っているかもしれません。試す:

pd.crosstab(df.store, df.day, margins=False)

これにより、ストアがインデックス、日が列の df が得られます。次のようなことができます:

df.reset_index(level=0, inplace=True) 

インデックスを列に変換し、複数のインデックス列がある場合は、次のようになります。

df.columns = [''.join(col).strip() for col in df.columns.values]

「フラット」なDFを得るために。

あなたはこれを行うことができます:

pd.crosstab([df.store, df.day.....], [df.store, df.day.....],margins=False)
于 2016-11-22T16:14:45.760 に答える