我有一個熊貓數據框,我想檢查每列,並且如果值曾經達到.92或更低,我希望將它之後的每個值都更改爲1。一個簡單的方法來完成這個?熊貓在特定值之後創建列1中的所有值
回答
考慮數據框df
np.random.seed([3,1415])
df = pd.DataFrame(np.random.rand(10, 10) * 10, columns=list('ABCDEFGHIJ')).round(2)
使用cumprod
一個布爾數據幀。然後使用在pd.DataFrame.where
df.where(df.gt(.92).cumprod().astype(bool), 1)
A B C D E F G H I J
0 4.45 4.08 4.6 4.65 4.63 1.0 8.50 8.18 7.78 7.58
1 9.35 8.31 8.8 9.27 7.22 1.0 1.46 2.00 4.38 1.01
2 2.79 6.10 1.0 8.37 7.40 1.0 6.91 3.77 2.25 4.35
3 7.01 7.01 1.0 1.00 7.01 1.0 7.65 2.53 5.48 7.79
4 6.52 1.36 1.0 1.00 2.75 1.0 7.14 7.76 5.42 8.37
5 5.38 1.86 1.0 1.00 3.74 1.0 7.76 1.00 5.04 6.71
6 6.20 3.02 1.0 1.00 3.68 1.0 8.82 1.00 4.96 8.06
7 1.00 4.38 1.0 1.00 1.00 1.0 5.85 1.00 6.39 1.33
8 1.00 8.82 1.0 1.00 1.00 1.0 1.00 1.00 6.06 4.02
9 1.00 6.41 1.0 1.00 1.00 1.0 1.00 1.00 1.09 3.15
一些關於我的解決辦法困擾着我。所以我asked my own question here.。考慮到鏈接問題的建議,這是一個更好的解決方案。請考慮以下鏈接並表示對問題和答案的讚賞。謝謝。
v = df.values
mask = np.logical_and.accumulate(v > .92, 0)
pd.DataFrame(
np.where(mask, v, 1),
df.index, df.columns
)
A B C D E F G H I J
0 4.45 4.08 4.6 4.65 4.63 1.0 8.50 8.18 7.78 7.58
1 9.35 8.31 8.8 9.27 7.22 1.0 1.46 2.00 4.38 1.01
2 2.79 6.10 1.0 8.37 7.40 1.0 6.91 3.77 2.25 4.35
3 7.01 7.01 1.0 1.00 7.01 1.0 7.65 2.53 5.48 7.79
4 6.52 1.36 1.0 1.00 2.75 1.0 7.14 7.76 5.42 8.37
5 5.38 1.86 1.0 1.00 3.74 1.0 7.76 1.00 5.04 6.71
6 6.20 3.02 1.0 1.00 3.68 1.0 8.82 1.00 4.96 8.06
7 1.00 4.38 1.0 1.00 1.00 1.0 5.85 1.00 6.39 1.33
8 1.00 8.82 1.0 1.00 1.00 1.0 1.00 1.00 6.06 4.02
9 1.00 6.41 1.0 1.00 1.00 1.0 1.00 1.00 1.09 3.15
定時
%timeit df.where(df.gt(.92).cumprod().astype(bool), 1)
1000 loops, best of 3: 844 µs per loop
%%timeit
v = df.values
mask = np.logical_and.accumulate(v > .92, 0)
pd.DataFrame(
np.where(mask, v, 1),
df.index, df.columns
)
10000 loops, best of 3: 65.8 µs per loop
我從來沒有聽說過df.gt。那麼在.gt調用之前,那個df中的所有1.00都是0.92還是更少? – James
@詹姆斯我給你的代碼重建相同的數據框。看看你自己,看看。 :-) – piRSquared
好的謝謝!我會在決賽後的一段時間玩代碼,並接受你的答案,如果它適合我的朋友! – James
- 1. 熊貓DataFrame在給定索引值的1列中替換值
- 2. 熊貓:只有在特定的列中的值與
- 3. 從熊貓系列選擇特定值
- 4. 如何用熊貓創建一個具有特定值的列表?
- 5. 根據另一列的值在熊貓中創建新列
- 6. 更改熊貓中特定行的值
- 7. Python的大熊貓:特定列的每個實例創建新列值
- 8. 在特定列(大熊貓)第一次出現NaN之後放下所有行
- 9. 從熊貓Dataframe中提取在特定列中具有特定值的所有行
- 10. 熊貓:通過現有列之間的線性插值創建新列
- 11. 熊貓數據框查找具有特定列值的所有行?
- 12. 熊貓,如何列合併到1,其中所有的值被加在一起
- 13. 降排在熊貓特定值GROUPBY
- 14. 選擇特定值的特定列大熊貓
- 15. 創建大熊貓基於價值的唯一值的新列
- 16. 在熊貓中創建日期列表的虛擬值
- 17. 熊貓 - 用另一列中的相應值替換所有列中的特定值
- 18. 如何循環熊貓中特定列的列表值?
- 19. 在特定列中提取值,並在大熊貓
- 20. 創建熊貓數據透視表時存儲所有值
- 21. cumsum大熊貓高達特定的值 - 蟒蛇大熊貓
- 22. 熊貓:在所有列
- 23. 熊貓:創建單個大小和總計列之後多列
- 24. 熊貓:特定的列
- 25. 熊貓 - 如何替換系列中的特定值?
- 26. 熊貓:從行的特定列中選擇值
- 27. 返回熊貓數據框中特定列的int值
- 28. 熊貓數據框減少特定日期之間的行值
- 29. 從大熊貓的所有列值中剝離空間
- 30. 熊貓read_csv將所有的值放在一列和一行
你的問題還不清楚。你的意思是檢查每列從上到下,如果一個值達到0.92或更低,你想要將該值(在該列中)之後的每個值都更改爲1,那麼是否在列內檢查? –
對不起,我應該寫出來的框架,但我在手機上,這是一個痛苦...但基本上,如果列值是1.01,.98,.97,.92,.93,.91然後我想將列更改爲1.01,.98,.97,.92,1,1.謝謝! – James
列中是否還有一些模式。在你的例子中,我可以看到這些值按降序排列,或者只是一個巧合。 –