【问题标题】:Find index where elements change value pandas dataframe查找元素更改值的索引熊猫数据框
【发布时间】:2017-09-17 09:47:48
【问题描述】:

关于this question/answer,有没有办法在不将其转换为 numpy 数组的情况下为 pandas 数据帧结构完成相同的功能?

【问题讨论】:

  • 如果你把这个问题做成一个独立的问题会更好

标签: python pandas


【解决方案1】:

更新:我们可以根据@LorenzoMeneghetti 使用它

s[s.diff() != 0].index.tolist()

输出:

[0, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16]

s = pd.Series([1, 1, 1, 1, 1, 2, 2, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 5, 5])

print(s.diff()[s.diff() != 0].index.values)

或者:

df = pd.DataFrame([1, 1, 1, 1, 1, 2, 2, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 5, 5])

print(df[0].diff()[df[0].diff() != 0].index.values)

输出:

[0 5 8 9 10 11 12 13 14 15 16]

【讨论】:

  • 感谢您的回答!但是还有一个问题,为什么数据帧(来自 read_csv)会返回每个索引而不是值更改时的索引?我用来读取 csv 的代码 read_csv(file, sep=',', header = None, skiprows = 1, usecols = [colNum], dtype = np.float 64, na_values = [" "])。我从 read_csv 打印出 DataFrame,它给了我 [6,6,6,6,1,1,1,1,1,2,2,2,2,2] 但代码 df[0].diff() ... 返回 [0,1,2,3,4...11,12,13]。
  • 我怀疑您的第一列或第 0 列实际上是行号,而不是您期望的变化值。如果没有 csv 和您正在执行的确切读取语句,我很难判断。
  • 啊,谢谢,看来我得把colNum和df[colNum]匹配一下了。
  • 为什么是双 diff()?我不能只做 s[s.diff() != 0].index.values 吗?
  • @LorenzoMeneghetti 老实说,这是我第一次学习 pandas 时的一个旧答案。你是对的,这是一个更好的解决方案。
猜你喜欢
  • 2020-04-01
  • 2019-01-26
  • 2018-07-02
  • 2023-04-07
  • 2018-08-21
  • 2017-03-18
  • 2013-08-22
相关资源
最近更新 更多