【问题标题】:Count unique values from one column across multiple dataframes计算跨多个数据框的一列的唯一值
【发布时间】:2017-09-15 12:02:49
【问题描述】:

是否可以使用 pandas 计算跨多个数据框的一列中的唯一值?

示例

columnname 在每个 dataframe 中必须搜索唯一的 values = 'userid'

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

所有数据框'userid'列中的唯一值
谢谢!

【问题讨论】:

  • 那些对我来说不像数据框。一些真实的数据怎么样?
  • 或者,所有数据框都有用户 ID 列吗?
  • @JohnGalt 打电话给我真的很容易......只需输入@c,然后点击Tab。 c 不是 unicode ;-)
  • @cᴏʟᴅsᴘᴇᴇᴅ 所有数据帧都有一个名为 userId 的列

标签: python pandas dataframe unique


【解决方案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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多