1

月に関する情報をグループ化し、cumsum を使用してその月の現在の合計をデータフレームに計算したデータを含む csv ファイルがあります。

このコードの使用:

df = df.sort_index(sort_remaining=True).sort_values('months')
df['value'] = df.groupby('months')['value'].cumsum()

EXCEL の OUTPUT の例ですが、私の DF は数千の行で同じように見えます。

出力例

ここで、月をグループ化して各値をプロットするグラフをプロットしたいので、基本的に、時間の経過とともに値がどのように上下に移動したかを示す 12 のプロット ラインを作成します。

出力プロットは、各月の累積を示す次のグラフのようになります。 各月の累計を示すグラフ

#

@jezrael のおかげで、現在は機能しています。以下はプロットです 作業出力

4

1 に答える 1

0

数値の代わりに月名を使用し、新しいインデックス値を使用する必要があると思いpivotます:renamecumcount

d = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May',
     6 : 'Jun',7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}

g = df.groupby('months').cumcount()
pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d).plot()

詳細:

print(pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d))
months    Jan   Feb   Mar   Apr
0        50.0   2.0  10.0   5.0
1        80.0   3.0  16.0  20.0
2       120.0   8.0  31.0  40.0
3       140.0  11.0  34.0  50.0
4         NaN  15.0  43.0  75.0

編集:

プロットの使用のためにいくつかの月のみを定義するにはsubset:

months = ['Mar','Apr']
g = df.groupby('months').cumcount()
pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d)[months].plot()

DataFrameまたは入力の月をboolean indexingandでフィルタリングしますisin

df = df[df['months'].isin([3,4])]
g = df.groupby('months').cumcount()
pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d)[months].plot()
于 2018-04-20T08:05:40.720 に答える