今回はPandasを使った際に、すぐに分からなかった事象のまとめです。
結構Pandasってどうやって操作すればいいのかな?って迷うことも多いので少しでも参考になれば幸いです。
使用するデータセット作成
- まずは適当にデータセットを作成する。本記事はこの簡単なデータを例に書いていく
index=['製品A','製品B','製品C']columns=['春','夏','秋','冬']data=np.array([[0,10,20,30],[0,0,100,20],[50,100,20,40],])df=pd.DataFrame(data,index=index,columns=columns)df.head()
| 春 | 夏 | 秋 | 冬 |
---|
製品A | 0 | 10 | 20 | 30 |
製品B | 0 | 0 | 100 | 20 |
製品C | 50 | 100 | 20 | 40 |
ケース①各行の最大値,最小値に対応しているカラム名、そしてその値を抜き出して追加
- つまり製品Aなら冬が一番大きく製品Cなら夏が一番大きい数字なので、新しいカラム「売れる季節」にその季節を挿入する
forindex,rowindf.iterrows():# df.ix[index, '売れる季節'] = row.argmax()
df.ix[index,'売れる季節']=row.idxmax()#どっちでもできる
# df.ix[index, '売れない季節'] = row.argmin()
df.ix[index,'売れない季節']=row.idxmin()#どっちでもできる
df.ix[index,'MAX']=row.max()df.ix[index,'MIN']=row.min()df.head()
| 春 | 夏 | 秋 | 冬 | 売れる季節 | 売れない季節 | MAX | MIN |
---|
製品A | 0 | 10 | 20 | 30 | 冬 | 春 | 30 | 0 |
製品B | 0 | 0 | 100 | 20 | 秋 | 春 | 100 | 0 |
製品C | 50 | 100 | 20 | 40 | 夏 | 秋 | 100 | 20 |
ケース②各行で最初に正の整数になるカラム名を抜き出して追加
- つまり各製品が初めて売れ始めた季節を出したい。Aなら夏、Bなら秋という感じ
forindex,rowindf.iterrows():#index[0]で最初に条件が成立したものを取り出す
df.ix[index,'売れ始め季節']=row[row>0].index[0]df.head()
| 春 | 夏 | 秋 | 冬 | 売れ始め季節 |
---|
製品A | 0 | 10 | 20 | 30 | 夏 |
製品B | 0 | 0 | 100 | 20 | 秋 |
製品C | 50 | 100 | 20 | 40 | 春 |
ケース③0が1つも入ってない行を抜き出したい
#not_zero_df = df.query('春 > 0 and 夏 > 0 and 秋 > 0 and 冬 > 0')
#not_zero_df = df.query('春 != 0 and 夏 != 0 and 秋 != 0 and 冬 != 0')
# ↑でもいいが変数として外だしも可能。下で「@」をつければいい
hoge1,hoge2,hoge3,hoge4=0,0,0,0not_zero_df=df.query('春 > @hoge1 and 夏 > @hoge2 and 秋 > @hoge3 and 冬 > @hoge4')not_zero_df.head()
- ちなみに夏のみに着目して0以外を抽出したい場合は同じくこう書けばいい(夏が0でない行を取り出す)
hoge=0not_zero_df=df.query('夏 != @hoge')not_zero_df.head()
| 春 | 夏 | 秋 | 冬 |
---|
製品A | 0 | 10 | 20 | 30 |
製品C | 50 | 100 | 20 | 30 |
今後も随時追記していく予定です