2017-09-15 6 views
-1

パンダを使用して複数のデータフレームにわたって1つの列から一意の値を数えることはできますか?複数のデータフレームにわたって1つの列から一意の値を集計する

一意値= 'ユーザーID' カラム'ユーザID' で

df1: 1, 2, 3, 4 df2: 1, 2, 3 df3: 5, 6, 7 output = 7

一意の値を検索する必要があり、すべてのデータフレームでColumnNameの全部でデータフレーム
ありがとうございました!

+0

は、それらは私にはデータフレームのようには見えません。 _real_データはどうですか? –

+0

また、すべてのデータフレームにuserIdという列がありますか? –

+0

@JohnGalt私に電話するのは本当に簡単です。ちょうど@cと打ってからタブを押してください。 cはユニコードではありません;-) –

答えて

1

すべてのデータフレームのuserIdカラムにアクセスしてから、pd.concatpd.Series.nuniqueを呼び出します。

df1 
    userId 
0  1 
1  2 
2  3 
3  4 

df2 
    userId 
0  1 
1  2 
2  3 

df3 
    userId 
0  5 
1  6 
2  7 

series_list = [x['userId'] for x in [df1, df2, df3]] 
count = pd.concat(series_list).nunique() 

count 
7 
1

numpyのが速いことができ、使用

In [255]: np.unique(np.hstack([d['userId'].values for d in [df1, df2, df3]])).size 
Out[255]: 7 

タイミング

In [251]: [d.shape for d in [df1, df2, df3]] 
Out[251]: [(4000, 1), (3000, 1), (3000, 1)] 

In [253]: %timeit np.unique(np.hstack([d['userId'].values for d in [df1, df2, df3]])).size 
10000 loops, best of 3: 184 µs per loop 

In [254]: %timeit pd.concat([x['userId'] for x in [df1, df2, df3]]).nunique() 
1000 loops, best of 3: 885 µs per loop 
関連する問題