こういうときは、小さなサンプルデータを自分で作って、自分で試行錯誤したり、質問文にサンプルデータを載せるなりしてください。
ピボットテーブルの結果を格納したデータフレームの変数そのものに対して変数 <= 90
を実行すると、データフレームの各要素が90以下かどうかの真偽値(True/False)を要素とする新たなデータフレームを生成できます。あとは、それを利用して「あなたのやりたい抽出」(詳細が書かれていないので、以下ではやりません)を自分で行なえばいい。
補足: やりたいことが「顧客別totalが200以下の行を抽出し、顧客別totalだけの棒グラフを作りたい」だと判明したので、それに合わせて修正。
dfp[dfp['total'] <= 200]
で顧客別totalの値が200以下のピボットデーブルの行がデータフレームとして得られます。顧客別totalの値だけが必要なら、dfp.loc[dfp['total'] <= 200, 'total']
でシリーズが得られます。これらに対してplot.bar
すれば棒グラフが生成できます。
Python
1import pandas as pd
2import io
3import matplotlib.pyplot as plt # グラフ表示用に追加
4import japanize_matplotlib # グラフで日本語表示用に追加
5
6txt = """
7顧客ID,アイテムID,数量
8A,Item1,50
9A,Item2,30
10B,Item1,100
11B,Item3,90
12C,Item2,200
13C,Item3,10
14"""
15
16# 日本語を含むデータフレームの出力を揃える
17pd.set_option('display.unicode.east_asian_width', True)
18
19# ファイルの代わりにtxtから読み込んでデータフレームを生成
20df = pd.read_csv(io.StringIO(txt))
21
22# ピボットテーブルを作成。欠損値を0に置換してから整数化
23dfp = pd.pivot_table(df, index='顧客ID', columns='アイテムID', values='数量', aggfunc='sum', margins=True, margins_name='total').fillna(0).applymap(int)
24print(dfp, end="\n\n")
25
26# 顧客別のtotalの値が200以下の顧客だけ集めたデータフレームを生成
27df2 = dfp[dfp['total'] <= 200]
28print(df2, end="\n\n")
29# df2.plot.bar()
30# plt.show()
31
32# 顧客別のtotalの値が200以下のtotalの値だけ集めたシリーズを生成してグラフを表示
33s = dfp.loc[dfp['total'] <= 200, 'total']
34print(s, end="\n\n")
35s.plot.bar()
36plt.show()
result
1アイテムID Item1 Item2 Item3 total
2顧客ID
3A 50 30 0 80
4B 100 0 90 190
5C 0 200 10 210
6total 150 230 100 480
7
8アイテムID Item1 Item2 Item3 total
9顧客ID
10A 50 30 0 80
11B 100 0 90 190
12
13顧客ID
14A 80
15B 190
16Name: total, dtype: int64
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/09 07:44
2021/02/11 03:16
2021/02/11 03:37
2021/02/11 04:20