Pandas DataFrameの行を、最大のような各列の特定の条件で整列する最も効率的な方法は何ですか?各列の最大値でのPandas DataFrameの行の整列
ここでは、各列の最大値を見つけた後に手動で列をシフトする例を示しますが、より簡単で効率的な方法があることを期待しています。アライメント前
tmp = yearly_data_scaled.filter(regex="ZW") # DataFrame to align
tmp.describe()
ZW_2013 ZW_2014 ZW_2015 ZW_2016 ZW_2017 count 251.000000 251.000000 251.000000 251.000000 247.000000 mean 0.864789 0.803246 0.825631 0.843604 0.806205 std 0.053225 0.090301 0.047080 0.068289 0.049530 min 0.758926 0.647762 0.736072 0.701984 0.716466 25% 0.821169 0.734540 0.795039 0.783745 0.779140 50% 0.866351 0.791254 0.818219 0.831156 0.794635 75% 0.891943 0.866758 0.847499 0.904693 0.819380 max 1.000000 1.000000 1.000000 1.000000 1.000000
プロット:
_ = tmp.plot(figsize=(20, 15))
各列の最大値を検索します。
手動max_list = []
for i in range(num_years):
max_idx = tmp['ZW_' + str(start_year + i)].idxmax()
max_list.append(max_idx)
print('Index of the maximum for each column = ' + str(max_list) + '\n')
Index of the maximum for each column = [12, 85, 123, 108, 126]
それらは指数125(約グラフの水平方向の中央)とプロットを揃えるように、各列をシフト:
_ = pd.concat([tmp['ZW_2013'].shift(125-max_list[0]),
tmp['ZW_2014'].shift(125-max_list[1]),
tmp['ZW_2015'].shift(125-max_list[2]),
tmp['ZW_2016'].shift(125-max_list[3]),
tmp['ZW_2017'].shift(125-max_list[4])], axis=1).plot(figsize=(20, 15))
あなたは今のところ – Wen