【问题标题】:How to compare value in Pandas DataFrame against a value in the previous row AND the previous column?如何将 Pandas DataFrame 中的值与上一行和上一列中的值进行比较?
【发布时间】:2020-07-29 19:06:43
【问题描述】:
我有一个数据框,由两列填充浮点值组成。我需要在当前“h”值之前的索引处计算“h”的所有值减去“c”的所有值。
因此,例如,对于第 1 行中的“h”,我需要计算 1.17322 - 1.17285(上一行中“c”的值)
我尝试了几种不同的方法来实现这一点,包括使用:.iloc、.shift()、.groupby() 和 .diff(),但我无法得到我想要的。
如果有人能帮忙,将不胜感激
c h
0 1.17285 1.17310
1 1.17287 1.17322
2 1.17298 1.17340
3 1.17346 1.17348
4 1.17478 1.17511
5 1.17595 1.17700
6 1.17508 1.17633
7 1.17474 1.17545
8 1.17463 1.17546
9 1.17224 1.17468
10 1.17437 1.17456
11 1.17552 1.17641
12 1.17750 1.17784
13 1.17694 1.17770
【问题讨论】:
标签:
python
pandas
loops
dataframe
【解决方案1】:
使用shift 试试这个,例如:
df['c_shift'] = df['c'].shift()
df['diff'] = df['h'] - df['c_shift']
print(df)
输出:
c h c_shift diff
0 1.17285 1.17310 NaN NaN
1 1.17287 1.17322 1.17285 0.00037
2 1.17298 1.17340 1.17287 0.00053
3 1.17346 1.17348 1.17298 0.00050
4 1.17478 1.17511 1.17346 0.00165
5 1.17595 1.17700 1.17478 0.00222
6 1.17508 1.17633 1.17595 0.00038
7 1.17474 1.17545 1.17508 0.00037
8 1.17463 1.17546 1.17474 0.00072
9 1.17224 1.17468 1.17463 0.00005
10 1.17437 1.17456 1.17224 0.00232
11 1.17552 1.17641 1.17437 0.00204
12 1.17750 1.17784 1.17552 0.00232
13 1.17694 1.17770 1.17750 0.00020
当然,您可以一步完成:
df['diff'] = df['h'] - df['c'].shift()