【问题标题】:How pandas diff handles bool values?pandas diff 如何处理布尔值?
【发布时间】:2023-04-04 10:57:01
【问题描述】:

这是显式减法的结果

>> True - False
1
>> False - True
-1

这是pandas.Series.diff的结果

>> x = pd.Series([True,False,True])
>> x.diff()

0     NaN
1    True
2    True
dtype: object

但是,我希望得到

0     NaN
1      -1
2       1
dtype: object

为什么结果不同以及在这种情况下 pandas 如何处理 bool?

【问题讨论】:

  • 我怀疑这也来自潜在的 Numpy 行为np.diff(x.values)
  • @JohnGalt 似乎是正确的。 github.com/numpy/numpy/issues/9251 这是一个 numpy 功能。 False - True 应该等于什么?为了确保,将 False 转换为 0,将 True 转换为 1,然后减去。

标签: python-3.x pandas boolean


【解决方案1】:

来自series.py

result = algorithms.diff(_values_from_object(self), periods)

来自algorithms.py

out_arr[res_indexer] = arr[res_indexer] - arr[lag_indexer]

因此,它会减去 2 个 numpy 布尔数组。

正如在 cmets 中指出的那样,numpy 以自己的方式减去布尔值,这与原生 python 减法不同

>> np.array([True, False]) - np.array([False, True])
array([ True,  True], dtype=bool)

【讨论】:

  • 我认为,您也应该提出这个问题github.com/pandas-dev/pandas/issues 以获取维护者的通知和响应。而且,请注意,x - x.shift() 相当于 x.diff() 工作正常。
  • @JohnGalt 感谢您的建议,这里是issue
猜你喜欢
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2020-07-30
相关资源
最近更新 更多