两个 pandas 数据框中列中唯一值的数量

Number of unique values in columns in two pandas dataframe

我有两个 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。因此,data1 会得到 2, 3data2 会得到 3, 3。有没有办法(除了连接 DataFrame's)以便在这两个 DataFrame's 组合时我可以获得唯一值的数量?我想得到 3, 4.

我认为不是。首先需要concat

df = pd.concat([df1,df2]).apply(pd.Series.nunique)
print (df)
a    3
b    4
dtype: int64
#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

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

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