前提・実現したいこと
行毎に最も古いデータを抽出したいと考えています。
元データフレーム(df)
||A_日付|A_データ|B_日付|B_データ|C_日付|C_データ|
|:--|:--:|--:|
|
|0|1/1 11:11:11|10|1/3 12:12:12|5|NaT|NaN|
|1|NaT|NaN|NaT|NaN|1/1 10:10:10|100|
|2|1/10 10:10:15|5|1/8 12:12:15|5|1/10 03:10:10|5|
処理後のデータフレームのイメージ
||A_日付|A_データ|B_日付|B_データ|C_日付|C_データ|選択日付|抽出データ|
|:--|:--:|--:|
|
|0|1/1 11:11:11|7|1/3 12:12:12|5|NaT|NaN|1/1 11:11:11|7|
|1|NaT|NaN|NaT|NaN|1/1 10:10:10|3|1/1 10:10:10|3|
|2|1/10 10:10:15|5|1/8 12:12:15|2|1/10 03:10:10|8|1/8 12:12:15|2|
0行目は、Aが1/1で最も古いので、そのデータ「7」を抽出
1行目は、Cのみにデータがあり、そのデータ「3」を抽出
2行目は、Bが1/8で最も古いので、そのデータ「2」を抽出
発生している問題・エラーメッセージ
A_日付、B_日付、C_日付から最も古い日付を抽出する為に、min関数で処理しようと考えましたが、NaTが含まれると、NaTが選択されてしまいます。
該当のソースコード
NaTが含まれない場合は、下記の記述でイメージするテーブルが作成できました。
Python
1def func(row): 2 return min(row['A_日付'], row['B_日付'], row['C_日付']) 3 4df['選択日付'] = df.apply(func, axis=1) 5 6df.loc[df['A_日付'] == df['選択日付'], '抽出データ'] = df['A_データ'] 7df.loc[df['B_日付'] == df['選択日付'], '抽出データ'] = df['B_データ'] 8df.loc[df['C_日付'] == df['選択日付'], '抽出データ'] = df['C_データ'] 9
試したこと
min関数の中に skipna=True を入れると、下記のエラーとなりました。
TypeError: 'skipna' is an invalid keyword argument for min()
お手数ですが、対処方法をご教示頂けると幸いです。
回答1件
あなたの回答
tips
プレビュー