Help us understand the problem. What is going on with this article?

【pandas】集約したある列の最大値と、その時の他の列の値を取得する

More than 1 year has passed since last update.

はじめに

やりたいことは

  • データを一日単位でグルーピング
  • ある列の最大値と、その時の他の列の値を取得する

の2点です。
最大値取得は簡単なのですが、その値が最大値をとる時の、他の列の値を取得するのに手間取ったので記録しておきます。

ソース

まず、データとして以下のようなCSVを読み込みました。
1ヶ月分の、1時間単位の気温と湿度のCSVです。

sample.py
import pandas as pd

df = pd.read_csv('data.csv', index_col=0, parse_dates=True)

df

                     temperature  humidity
date                                      
2018-10-26 01:00:00         16.3        75
2018-10-26 02:00:00         16.5        70
2018-10-26 03:00:00         16.0        68
2018-10-26 04:00:00         15.3        68
2018-10-26 05:00:00         15.7        66
2018-10-26 06:00:00         15.8        69
...                          ...       ...
2018-11-26 21:00:00         13.7        70
2018-11-26 22:00:00         14.1        65
2018-11-26 23:00:00         13.4        70
2018-11-27 00:00:00         13.7        68

インデックスがdate,カラムはtemperature(気温)とhumidity(湿度)となっています。
ここから、一日の最大気温とその時の湿度を抽出します。

sample.py
# 一日の最大気温
max_temp_series = df['temperature'].groupby(pd.Grouper(freq='D')).max()

# 最大気温の時のインデックス
max_temp_index = df['temperature'].groupby(pd.Grouper(freq='D')).idxmax()

# 最大気温の時の湿度
humidity_series = df.loc[df.index.isin(max_temp_index), 'humidity']

以上です。やってることとしては

  • groupby(pd.Grouper(freq='D'))で一日単位にグルーピング
  • idxmax()で気温が一日最大の時のインデックスを取得
  • グルーピング前のデータフレームから、取得したインデックスで湿度を抽出

という流れです。
idxmax()がグルーピング後にも使えるということを知らなかったので時間がかかりました。

終わりに

もっと簡潔な方法がありそうな気がするので、何かあったらコメントをお願いします。

参考

公式リファレンス

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away