データフレーム内の各列のゼロと負の値のカウント

Counting and printing zeroes and negative values for each Column in a Dataframe – StackOverflow

内容自体は非常に基本的かつ単純な話なので特筆すべき事はないけど,時間効率の観点からは,行方向な処理なので,少しの工夫で大きく変わってくる.

pandas.DataFrameの行方向の処理は数値データの場合,numpy.ndarrayを処理する事に等しいので,pandas.DataFrame.apply(,raw=True)がリーズナブル.列が増えると,イテレートするコストがボトルネックになるので,numpyソリューションを考えるべき.

import pandas as pd


df = pd.DataFrame({'a': [-3, -2, 0], 'b': [-2, 2, 5], 'c': [-1, 0, 7], 'd': [1, 4, 8]})
df = pd.concat([df]*1000000, ignore_index=True)
%timeit df.lt(0).sum(0)
%timeit df.eq(0).sum(0)
%timeit df.lt(0).apply(np.count_nonzero, raw=True)
%timeit pd.Series(np.count_nonzero(df.values<0, 0), index=df.columns)
%timeit df.eq(0).apply(np.count_nonzero, raw=True)
%timeit pd.Series(np.count_nonzero(df.values==0, 0), index=df.columns)
1 loop, best of 3: 234 ms per loop
1 loop, best of 3: 235 ms per loop
100 loops, best of 3: 15 ms per loop
10 loops, best of 3: 25.6 ms per loop
100 loops, best of 3: 14.9 ms per loop
10 loops, best of 3: 26.5 ms per loop
カテゴリー: 未分類 パーマリンク

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中

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