是否有方法檢查當前行中的所有列值是否小於所有先前行中的對應列值(直到當前行行)在熊貓數據框中(貫穿整個數據框)並相應創建一個值爲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