【问题标题】:are values in rows of column of dataframe return true or false是数据框列的行中的值,返回 true 或 false
【发布时间】:2020-01-08 06:15:19
【问题描述】:

输入数据:

obj  number
1    433
2    342
3    111
4    345

输出数据:

true

试过了:

df[df['number'].isin([111,433])]
df.number.isin([111,433])
df.number.any() == 111 or 433

但他们都没有给我我正在寻找的结果

我正在尝试解析一个文件,并且任何时候该数字在 1 个数据帧中,我都想运行一些特殊的算法来重新格式化它。例如,如果 111 在数字列中,我想添加一个带有 layout-name 的列,其中应该出现值“layout1”

【问题讨论】:

  • 重复什么?这对任何人都有什么帮助?猜猜我在谷歌上搜索了 1 小时但没有找到答案。所以可能是另一个问题有另一个术语,所以我们中的一些人找不到它
  • 重新打开,因为有更多的问题,如在欺骗中回答。

标签: python pandas dataframe


【解决方案1】:

你让它太复杂了,你可以在这里检查是否有任何值是111

(df['number'] == 111).any()

或更短:

df['number'].eq(111).any()

如果您想检查两个(或多个值)是否出现在一个系列中:

>>> import numpy as np
>>> np.any(df[:,None] == np.array([[111, 222]]), axis=0).all()
False

如果要检查的项目数量相对较少,这应该可以解决问题。

【讨论】:

  • 如果我想检查 2 个值,比如说 111 和 222,该怎么办?
  • @J.Doe:因为两个值都应该是元素,或者至少一个?
  • 因为一行中的列是 111,另一行中的列是 222
【解决方案2】:

你很接近,用Series.any 测试标量值以测试至少一个True

print ((df.number == 111).any())
True

要使用OR 测试多个值,请使用Series.isinany

df.number.isin([111, 222]).any()

如果需要测试连续值 - 111 和下一行 222:

print (df)
   obj  number
0    1     433
1    2     342
2    3     111
3    4     222

print (((df['number'] == 111) & (df['number'].shift(-1) == 222)).any())
True

【讨论】:

  • @J.Doe - 比较复杂,一般的解决方案是here
  • 如果我只需要知道 111 和 222 是否在 1 个数据帧中,这不是简单的方法吗?没有排序矿石的东西。是否在数据框列中
  • @J.Doe - 它是print ((df.number == 111).any() and (df.number == 222).any())。这是and,因为使用来自一个标量的一个标量与另一个标量
  • @J.Doe - 不,然后使用另一种解决方案,给我一点时间
  • @J.Doe - 使用集合 - 函数 issubsetprint(set([111, 222]).issubset(set(df['number'])))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 2014-06-03
  • 2020-08-20
  • 2017-09-24
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多