我有一个熊猫数据框,我想检查每列,并且如果值曾经达到.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
列中是否还有一些模式。在你的例子中,我可以看到这些值按降序排列,或者只是一个巧合。 –