【问题标题】:How to calculate multiple row difference in pandas?如何计算熊猫的多行差异?
【发布时间】:2020-03-01 14:03:44
【问题描述】:

我想计算每行和接下来 5 行之间的差异,并返回所有这些值的最大值(仅限非 Nan),并对 pandas 数据框中的所有行重复相同的操作,最后在新列中打印值.我已经尝试过.shift(1) 函数并尝试对所有行迭代地执行它,但它似乎很慢。

A'  B'  Output
AA  1   4
BB  2   3
CC  3   2
DD  4   1
EE  5   0

【问题讨论】:

  • 能否请您添加到目前为止您尝试过的内容。
  • 问题与machine-learning 无关 - 请不要向无关标签发送垃圾邮件(已删除)。
  • 你能不能解释一下 BB 行的输出是 5 的?根据您的描述,应该是 3。
  • 是的,对不起。它是一个错字。应该是 3。谢谢

标签: python pandas


【解决方案1】:

你试过diff吗?

import pandas as pd
df = pd.DataFrame({'a': [1,2,3,4,5,0,5,1,4,3,2]})
col_n = []
diff_r = 5
for i in range(1, diff_r+1):
  col_n.append('d_'+str(i))
  df['d_'+str(i)] = df['a'].diff(i).shift(periods=-i)
df['d_abs_max'] = df[col_n].abs().max(axis=1)
df['d_max'] = df[col_n].max(axis=1)
print(df)

    a  d_1  d_2  d_3  d_4  d_5  d_abs_max  d_max
0   1  1.0  2.0  3.0  4.0 -1.0        4.0    4.0
1   2  1.0  2.0  3.0 -2.0  3.0        3.0    3.0
2   3  1.0  2.0 -3.0  2.0 -2.0        3.0    2.0
3   4  1.0 -4.0  1.0 -3.0  0.0        4.0    1.0
4   5 -5.0  0.0 -4.0 -1.0 -2.0        5.0    0.0
5   0  5.0  1.0  4.0  3.0  2.0        5.0    5.0
6   5 -4.0 -1.0 -2.0 -3.0  NaN        4.0   -1.0
7   1  3.0  2.0  1.0  NaN  NaN        3.0    3.0
8   4 -1.0 -2.0  NaN  NaN  NaN        2.0   -1.0
9   3 -1.0  NaN  NaN  NaN  NaN        1.0   -1.0
10  2  NaN  NaN  NaN  NaN  NaN        NaN    NaN

【讨论】:

  • 请检查。您提供的输出与 used 请求的输出不匹配。请验证
  • 是否可以打印最大值的索引?那么比如上面的dataframe,在输出列我们可以打印索引号5吗?
  • 快速搜索找到,idxmax() df['d_id_max'] = df[col_n].idxmax(axis=1)
猜你喜欢
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2019-11-03
  • 1970-01-01
  • 2019-09-11
  • 2019-04-03
相关资源
最近更新 更多