データフレーム列内の連続した値の和(任意長の範囲で合計)

extracting data from panda series as per the index of another panda series – StackOverflow

Numpyを用いるのがリーズナブルチョイス.

import pandas as pd
import numpy as np


def seq_sum_1d(arr, ind=None, lens=None):
    if ind is None:
        if lens is None:
            ind = np.concatenate(([0], np.flatnonzero(np.diff(arr))+1))
        else:
            ind = np.concatenate(([0], lens)).cumsum()[:-1]
    return np.add.reduceat(arr, ind)


def seq_cumsum_1d(a, ind=None, lens=None):
    arr = a.copy()
    if ind is None:
        if lens is None:
            ind = np.concatenate(([0], np.flatnonzero(np.diff(arr))+1))
        else:
            ind = np.concatenate(([0], lens)).cumsum()[:-1]
    arr[ind[1:]] -= np.add.reduceat(arr, ind)[:-1]
    return arr.cumsum(0)


x = pd.Series([220,340,500,600,700,900,540,60])
y = pd.Series([2,1,2,2,1])
res = pd.Series(seq_sum_1d(x.to_numpy(), lens=y.to_numpy()))
res
0     560
1     500
2    1300
3    1440
4      60
dtype: int64

 
 
関連:
データフレームの任意列でグループ化された年数を比較

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

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

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

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

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

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

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

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

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

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

Counting Sort(Python/Numpy)

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

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中

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