0

python/pandas を使用して、元のデータフレームから一意の行とその基本的な統計 (出現回数、平均など) のみで構成されるデータフレームを取得する簡単な方法があるかどうかを Web で検索しています。

これまでのところ、私の努力は途中までしか進んでいません。

 data.drop_duplicates

しかし、必要なすべての統計を簡単に取得する方法がよくわかりません。groupedby で for ループを実行できますが、かなり遅くなります。

私が考えた別のアプローチは、groupby を使用してから、describe を使用することでした。

data.groupby(allColumns)[columnImInterestedInForStats].describe()

しかし、allColumns の 19 列に対して、統計情報がまったくない 1 行しか返されないことがわかりました。驚くべきことに、allColumns に小さなサブセットのみを選択すると、実際にはサブセットとそのすべての統計の一意の組み合わせが得られます。私の期待は、groupby() の 19 列すべてに入力すると、すべての一意のグループが得られるということでしたか?

データ例:

df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), ['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3']

望ましい結果:

col2 col3  mean  count and so on
A    1      1.1    1
     3      4.8    3
B    2      6.0    2
     4      2.5    1
     5      5.2    2
     6      3.4    1
C    3      3.4    1
D    1      5.5    3

データフレームに。

私が見逃しているのは非常に些細なことに違いないと確信していますが、適切な答えが見つかりません。前もって感謝します。

4

1 に答える 1

0

agg() を使用して目的の効果を得ることができます。

import pandas as pd
import numpy as np

df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), \
                   ['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3']
df['col1'] = df['col1'].astype(float)

df.groupby(['col2','col3'])['col1'].agg([np.mean,'count',np.max,np.min,np.median])

「col1」の代わりに、df.groupby関心のある列のリストを配置できます。

于 2015-08-07T06:41:32.363 に答える