差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
programming:python:packages:pandas:update_multi_column [2021/12/03] – [巨大なDFに対する更新はなるべく一度に] ikatakos | programming:python:packages:pandas:update_multi_column [2021/12/03] (現在) – [巨大なDFに対する更新はなるべく一度に] ikatakos | ||
---|---|---|---|
行 418: | 行 418: | ||
そんな時、即時更新はせずリストに溜めて、更新は最後に(メモリが厳しいならある程度溜まった後に)行えば、高速化に繋がる。 | そんな時、即時更新はせずリストに溜めて、更新は最後に(メモリが厳しいならある程度溜まった後に)行えば、高速化に繋がる。 | ||
- | 下記は一例だが、もっと速い方法もあるかも知れない。 | + | 下記は一例だが、もっと速い方法もあるかも知れない。(例なので処理内容には特に意味は無い) |
<sxh python; | <sxh python; | ||
+ | # ' | ||
for i, grouped_df in df.groupby(' | for i, grouped_df in df.groupby(' | ||
# なんか処理する | # なんか処理する | ||
行 428: | 行 429: | ||
<sxh python; | <sxh python; | ||
+ | # ' | ||
buf = [] | buf = [] | ||
for i, grouped_df in df.groupby(' | for i, grouped_df in df.groupby(' | ||
行 435: | 行 437: | ||
# 最後に更新する | # 最後に更新する | ||
- | update_sr = pd.concat(buf) | + | update_sr = pd.concat(buf) |
update_sr.sort_index(inplace=True) | update_sr.sort_index(inplace=True) | ||
df.loc[update_sr.index, | df.loc[update_sr.index, | ||
行 441: | 行 443: | ||
<sxh python; | <sxh python; | ||
+ | # ' | ||
+ | |||
update_data = [] | update_data = [] | ||
update_indices = [] | update_indices = [] | ||
for i, grouped_df in df.groupby(' | for i, grouped_df in df.groupby(' | ||
# なんか処理する | # なんか処理する | ||
+ | | ||
+ | # 更新用numpy配列を作る | ||
n = len(grouped_df) | n = len(grouped_df) | ||
si = grouped_df.index[0] | si = grouped_df.index[0] | ||
行 450: | 行 456: | ||
| | ||
update_table = np.zeros((n, | update_table = np.zeros((n, | ||
- | update_table[:, | + | update_table[:, |
- | update_table[:, | + | update_table[:, |
| | ||
+ | # 蓄積する | ||
update_data.append(update_table) | update_data.append(update_table) | ||
update_indices.extend(range(si, | update_indices.extend(range(si, | ||
行 458: | 行 465: | ||
# 最後に更新する | # 最後に更新する | ||
update_table = np.concatenate(update_data, | update_table = np.concatenate(update_data, | ||
- | df.loc[update_indices, | + | df.loc[update_indices, |
</ | </ | ||