我有一个大的(16000行)数据框,如下面的df
。我想生成一个新列,它计算每行中唯一值的数量,而不迭代每一行。
到目前为止,我已将pd.Series.value_counts
方法与pd.DataFrame.apply()
和pd.DataFrame.sum()
一起使用。但是当数据帧中存在重复值时,这将无法获得正确的结果。如何计算数据帧每行中唯一值的数量而不迭代它?
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.random.randn(5,5))
>>> df
0 1 2 3 4
0 0.429437 -0.931365 0.182996 0.627381 -0.166898
1 1.094186 0.080042 0.924192 0.120056 0.667423
2 -0.439858 1.681652 -1.753300 0.390554 0.561703
3 1.579391 1.377110 0.892134 1.704882 0.410462
4 -0.113080 -0.726894 1.904882 -0.800783 0.709755
>>> df['unique'] = df.apply(pd.Series.value_counts, axis=1).sum(axis=1)
>>> df
0 1 2 3 4 unique
0 -0.964615 0.039836 -0.004675 0.067316 0.266369 5
1 -1.582173 -1.329946 -0.597782 1.856062 1.056681 5
2 -0.566920 -0.107541 0.672243 -1.374591 -0.243655 5
3 0.357264 1.662374 -1.477057 0.629704 0.436156 5
4 -0.318111 -0.472437 -0.222260 0.463293 -0.394258 5