【问题标题】:Pandas returning inconsistent count of column values熊猫返回不一致的列值计数
【发布时间】:2019-07-11 09:43:17
【问题描述】:

我有一个名为“结果”的列,它包含 1 或 0。出于测试目的,我想获取 1 和 0 的数量,但我得到了一些奇怪的结果。

我最初会这样做:

df.sort_values(by='results', axis=0, ascending=False, inplace=True) 

然后:

num_ones = df['results'].value_counts().values[1]
num_zeroes = df['results'].value_counts().values[0]
print("num_ones: " + str(num_ones))
print("num_zeroes: " + str(num_zeroes))

输出:

num_ones: 3610
num_zeroes: 51500

我马上看到值被翻转了。 num_ones 实际上保存 0 的数量,反之亦然。

然后我做

df1 = df.loc[df['results'] == 1]
print('Ones: ' + str(df1.shape[0]))
df0 = df.loc[df['results'] == 0]
print('zeros: ' + str(df0.shape[0]))

输出:

Ones: 51500
zeros: 3610

结果是正确的。什么可能导致初始方法不起作用?

我注意到,对于具有

【问题讨论】:

  • 你的小df是什么样子的,1和0包含多少个?

标签: python pandas


【解决方案1】:

values[1] 获取索引1(第二个元素)可能不是1,这里是0,所以你需要像@WenYoBen 的答案那样做loc,或者一个条件:

>>> vc = df['result'].value_counts()
>>> vc[vc.index.eq(1)].item()
5
>>>

【讨论】:

  • 这是有道理的。但我想知道为什么我看不到较小数据集的问题。
  • @Brosef 表示0是dataframe的第一个值!
  • @Brosef 问题与数据框大小没有相关性
  • 我想相信没有相关性,但是在使用较小的数据集时不会发生这种情况。另外,我一开始就打电话给df.sort_values(by='results', axis=0, ascending=False, inplace=True) ,所以1应该总是在索引0处。
  • @Brosef 没错,stackoverflow.com/questions/51933763/…,这就是问题所在,至少大小和问题之间没有关联
【解决方案2】:

我们通常使用.loc 做的事情,因为在value_counts 之后结果变成index

num_ones = df['results'].value_counts().loc[1]
num_zeroes = df['results'].value_counts().loc[0]
print("num_ones: " + str(num_ones))
print("num_zeroes: " + str(num_zeroes))

由于value_counts 默认sort=True 而你的1 计数大于0,所以pandas 将1 排序在0 之上

举例

s=pd.Series([0,1,1]) #assuming it is well sorted
s.value_counts()
Out[4]: 
1    2
0    1
dtype: int64

如果你这样做 .value[0] 将输出 1 的计数

【讨论】:

  • 你知道stackoverflow.com/questions/51933763/… 所以你的底线有时很可能是错的
  • @U10-转发你的意思是什么?
  • 我的意思是 value_counts 并不总是保持秩序
  • @U10-Forward a h,好点和好的搜索,在那个帖子中更新
  • 哈哈我以为你会知道,我们第一次意识到:P
【解决方案3】:

虽然 @WeNYoBen 和 @U10-Forward 提到了访问值的正确方法,但问题的主要原因是在较小的数据集中有更多的 0,而在较大的数据集中有更多的 1 和 value_counts()是按降序排列的。

【讨论】:

  • 我们发现了问题,:-) +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
相关资源
最近更新 更多