我有一个大数据框,这里只是示例数据:
length force d1 d2 d3 d4
1 5000 300 300 300 300
1.2 5000 300 300 300 300
1.4 5000 300 300 300 300
1.6 2000 500 300 100 300
1.8 2000 600 300 200 300
2 3500 500 300 300 300
2.2 3500 300 300 300 300
2.4 3500 100 300 300 300
2.5 1500 100 400 200 300
2.6 1500 200 300 200 300
3 6000 200 200 200 100
我有四个参数 - d1, d2, d3 and d4. 我想遍历它们并找到一行和 (row-1) 之间的差异。对于两个参数,这种差异至少应出现在一行中(不能更多,也可以更少)。我想我会向数据框中添加一个新列,d1_test, d2_test, d3_test, d4_test如下所示:
df['d1_test'] = df['d1'].diff() != 0
所以我会得到:
length force d1 d2 d3 d4 d1_test d2_test d3_test 4_test
1 5000 300 300 300 300 False False False False
1.2 5000 300 300 300 300 False False False False
1.4 5000 300 300 300 300 False False False False
1.6 2000 500 300 100 300 True False True False
1.8 2000 600 300 200 300 True False True False
2 3500 500 300 300 300 True False True False
2.2 3500 300 300 300 300 True False False False
2.4 3500 100 300 300 300 True False False False
2.5 1500 100 400 200 300 False True True False
2.6 1500 200 300 200 300 True True False False
3 6000 200 200 400 100 False True False True
让我们考虑每个参数(d1, d2, d3, d4)也代表一个固定值:d1_pos = 30, d2_pos = 40, d3_pos=60, d4_pos=90.
然后是我想不通的部分。我想添加一个新列(带计算),例如df['result']当 d1-d4_test 中的两个为真时查找。我可以用布尔 sum() 来做到这一点,所以什么时候sum==2但我不知道哪两个参数是真。
在df['result']我想要这样的东西:
if d1_test AND d2_test = True:
df['force'] / (d2_pos - d1_pos)
elif d1_test AND d3_test = True:
df['force'] / (d3_pos - d1_pos)
elif d1_test AND d4_test = True:
df['force'] / (d4_pos - d1_pos)
对于所有其他组合也类似。我不认为这是正确的方法,因为我最终得到了许多组合。如果参数数量发生变化,例如如果我添加d5, d6, d7.
我也尝试过groupby()对数据进行切片,但无法真正弄清楚。我确定那里有更好的解决方案?我希望这是可以理解的。非常感谢。
慕标琳琳
相关分类