是否有方法检查当前行中的所有列值是否小于所有先前行中的对应列值(直到当前行行)在熊猫数据框中(贯穿整个数据框)并相应创建一个值为1或0的新列?检查当前行中的所有列值是否小于熊猫数据框中的所有先前行
回答
考虑数据框df
np.random.seed(1)
df = pd.DataFrame(np.random.rand(10, 2), columns=list('AB'))
df
A B
0 0.417022 0.720324
1 0.000114 0.302333
2 0.146756 0.092339
3 0.186260 0.345561
4 0.396767 0.538817
5 0.419195 0.685220
6 0.204452 0.878117
7 0.027388 0.670468
8 0.417305 0.558690
9 0.140387 0.198101
选项1
cummin
与shift
这里的概念是跟踪的最低值是什么,到目前为止为每列。如果特定行上的值小于前一行及其之前的所有行,则它必须是新的最小值。我们可以通过检查它是否小于前一行中的最小值来判断这是否为True
。
注意这应该工作得很好,与NaN
值。
df.assign(New=(df < df.cummin().shift()).all(1).astype(int))
A B New
0 0.417022 0.720324 0
1 0.000114 0.302333 1
2 0.146756 0.092339 0
3 0.186260 0.345561 0
4 0.396767 0.538817 0
5 0.419195 0.685220 0
6 0.204452 0.878117 0
7 0.027388 0.670468 0
8 0.417305 0.558690 0
9 0.140387 0.198101 0
选项2
numpy
版
numpy.minimum
v = df.values
c = np.minimum.accumulate(v[:-1], axis=0)
df.assign(New=np.append(False, (v[1:] < c).all(1)).astype(int))
A B New
0 0.417022 0.720324 0
1 0.000114 0.302333 1
2 0.146756 0.092339 0
3 0.186260 0.345561 0
4 0.396767 0.538817 0
5 0.419195 0.685220 0
6 0.204452 0.878117 0
7 0.027388 0.670468 0
8 0.417305 0.558690 0
9 0.140387 0.198101 0
使用@ piRsuared的DF:
np.random.seed(1)
df = pd.DataFrame(np.random.rand(10, 2), columns=list('AB'))
Out[31]:
A B
0 0.417022 0.720324
1 0.000114 0.302333
2 0.146756 0.092339
3 0.186260 0.345561
4 0.396767 0.538817
5 0.419195 0.685220
6 0.204452 0.878117
7 0.027388 0.670468
8 0.417305 0.558690
9 0.140387 0.198101
您可以使用apply将当前行与前面所有行的最大值进行比较,然后将结果转换为int。
df.apply(lambda x: (x<df[0:x.name].max()).all().astype(int),axis=1)
Out[30]:
0 0
1 1
2 1
3 1
4 1
5 0
6 0
7 1
8 1
9 1
dtype: int64
我想将min()逻辑应用于上面的命令,并且它完美地工作。但让我们说我有一个5行和5列的数据框。如果第一行中的第二列和第三列是Nan,那么对于第三行,此逻辑不起作用。 (如果前一行有南),对于下一行逻辑不起作用!我如何处理这个问题? – Harikrishna
任何人都知道如何使逻辑工作在我的情况。如果在我之前的行中,其中一列是Nan,则应该忽略它,并且必须将所有其他列与前一行进行比较。任何帮助将不胜感激 – Harikrishna
- 1. 熊猫 - 检查是否所有值楠
- 2. 平均先前和当前行 - 熊猫
- 3. 添加行大熊猫DF与值与所有以前的值
- 4. SUM()中的所有行当前行
- 5. 熊猫据帧,相对于当前行的列值
- 6. 在熊猫数据框的特定条目之前选择所有行
- 7. 输出来自熊猫数据框中所有列的数据
- 8. 熊猫将一行中的所有数据放在一列
- 9. 如何从teradata中的当前行值中减去所有以前的行值?
- 10. 更新基于当前值的熊猫数据框值
- 11. 如何更新python中熊猫数据框的特定列中的所有行?
- 12. 删除数据帧是以前所有的行值的行
- 13. 熊猫数据框凝胶所有行的一组列等于零
- 14. 是否有可能列出当前在.NET中运行的所有线程
- 15. 不计算大熊猫数据框中所有列的总和
- 16. 熊猫:和所有行
- 17. 在python熊猫数据框中从前面的行中减去列的行
- 18. 检查数组中的所有值是否存在于表中
- 19. 执行当前的ajax调用并中止所有先前的调用
- 20. 如何从GridView的当前行中选择所有数据
- 21. 列在熊猫数据框中的行
- 22. 在大熊猫中减去先前值的最小值DataFrame
- 23. 如何查询当前在表中的一列中指定的数据之前的所有行?
- 24. 将来自熊猫数据框列的所有值插入到函数中
- 25. 熊猫:将列与数据框的所有其他列进行比较
- 26. 检查当前行是否是一个数据行
- 27. 熊猫:检查所有列中是否存在某个值并仅替换该值的有效方法
- 28. 在获取它们之前检查行数是否比直接读取hibernate中的所有数据更有效?
- 29. 在熊猫数据框中查找具有相同列值的行
- 30. 熊猫乘以下列所有行中的另一列
@MukarramPasha也许,但我没有想到一种方法来做到这一点。在这个问题中,我关心我当前的行相对于之前的每一行。我不关心与之前的每一行相关的前一行。到目前为止,与累积最低值比较似乎是最好的方法。 – piRSquared
哦,我明白了,谢谢。 *道歉,我错误地删除了我的第一条评论。 –
@MukarramPasha如果你喜欢或欣赏答案,我们谁回应爱情票...只是说' – piRSquared