pandasデータフレーム列内のNaNに基づいて累積和をリセット – 任意の条件に基づいた範囲で累積和を求める

Pandas dataframe, cumsum reset on NAN – StackOverflow

「任意の条件に基づいた範囲で累積和を求める」話は,ほぼ全てseq_cumsum_1dで求められる.そして,殆の場合に時間効率も最も良い.リーズナブルチョイスと言って良い(と思う).

import io
import numpy as np
import pandas as pd


def seq_cumsum_1d(a, ind=None, lens=None, dtype=None):
    if dtype is None: dtype = a.dtype
    if ind is None:
        if lens is None:
            ind = np.concatenate(([0], np.flatnonzero(a==0)))
        else:
            ind = np.concatenate(([0], lens)).cumsum()[:-1]

    arr = a.copy()
    arr[ind[1:]] -= np.add.reduceat(arr, ind)[:-1]
    return arr.cumsum(0, dtype=dtype)


strings = """Index  s_number  s_cumsum
  0       1         1
  1       4         5
  2       6         11
  3       NaN       0
  4       7         7
  5       2         9
  6       3         12"""
df = pd.read_csv(io.StringIO(strings), sep='\s+')
print(df, end='\n\n')

a = df['s_number'].values
v = seq_cumsum_1d(np.where(np.isnan(a), 0, a), dtype=int)
df['s_cumsum2'] = v
print(df, end='\n\n')
   Index  s_number  s_cumsum
0      0       1.0         1
1      1       4.0         5
2      2       6.0        11
3      3       NaN         0
4      4       7.0         7
5      5       2.0         9
6      6       3.0        12

   Index  s_number  s_cumsum  s_cumsum2
0      0       1.0         1          1
1      1       4.0         5          5
2      2       6.0        11         11
3      3       NaN         0          0
4      4       7.0         7          7
5      5       2.0         9          9
6      6       3.0        12         12

 
 
関連:
しきい値に基づいて累積和を計算

データフレームの任意列における条件から降順の累積和を求める

データフレーム各行の連続したゼロをカウント

pandas.DataFrame.applyは(時空間効率の観点からは)使用するべきではない – 使用すべき明確な理由がない限りpandas.DataFrame.applyはリーズナブルチョイスになり得ない

特定の値のギャップを数える – 任意の要素間のカウント

シーケンシャルな値の累積和(cumsum)

ある配列から別の1次元numpyアレイの要素の出現数を調べる – 配列aについて配列bの要素をカウント

2D Numpy配列で最初の要素が重複している行の平均 – 2Dなnumpy.ndarrayの最初の要素(1列目)で各行をグルーピングして集計(平均を算出)

一貫性のある最大領域(最大ブロブ)を取得

Counting Sort(Python/Numpy)

カテゴリー: 未分類 パーマリンク

pandasデータフレーム列内のNaNに基づいて累積和をリセット – 任意の条件に基づいた範囲で累積和を求める への1件のフィードバック

  1. ピンバック: データフレーム列内の連続した値の和(任意長の範囲で合計) | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください