两个pandas数据帧中列中的唯一值数

时间:2017-05-19 05:47:38

标签: python pandas dataframe unique

我有两个pd.DataFrame个对象(从.csv文件中读取),比方说,

1, 2
1, 3
2, 4

2, 1
1, 2
3, 3

假设DataFrame被命名为data1data2。因此,我可以使用

分别轻松计算data1data2每列中唯一值的数量
 uniques = data.apply(pd.Series.nunique)

data分别由data1data2取代。因此2, 3 data13, 3 data2获得DataFrame。有没有办法(除了连接DataFrame' s)以便在这两个3, 4组合时我可以得到唯一值的数量?我想获得which.min

3 个答案:

答案 0 :(得分:1)

我想不是。首先需要concat

df = pd.concat([df1,df2]).apply(pd.Series.nunique)
print (df)
a    3
b    4
dtype: int64

答案 1 :(得分:1)

#use numpy unique to count uninues after combining same columns from both DF.

len(np.unique(np.c_[df1.iloc[:,0],df2.iloc[:,0]]))
Out[1398]: 3

len(np.unique(np.c_[df1.iloc[:,1],df2.iloc[:,1]]))
Out[1399]: 4

答案 2 :(得分:1)

另一种适用于任意数量数据框的替代方案:

dfs = [df1, df2]
print([
    len(set(np.concatenate([df[colname].unique() for df in dfs])))
    for colname in dfs[0]
])
[3, 4]

请注意,这仅在所有数据框具有相同列名时才有效。

我认为concat是最佳选择,除非您的数据框已经填满了本地内存:concatenating will copy