我有一个df,看起来像这样,但更大:

df = pd.DataFrame({
    'Time' : [1,2,7,10,15,16,77,98,999,1000,1121,1245,1373,1490,1555],  
    'ID' : ['1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '3', '3', '3', '3', '3'],
    'Act' : ['1', '2', '4', '4', '2', '0', '2', '4', '4', '1', '4', '4', '1', '1', '2'],
    'mean_bout_count' : ['2.3', '4', '7', '7', '1', '2', '2.2', '2.1', '2.1', '10', '3', '3', '3', '3', '3']})

对于"Act\u cat"==4和"mean\u about\u count"的每一行(<3我想从"Act\U cat"列中取-1.就我所知,下面的代码从所有行中取了-1,而且花费的时间太长...

df = df.reset_index()  
for i, row in df.iterrows():
    if df.iloc[i]["Act_cat"] == 4 and df.iloc[i]["mean_bout_count"] < 3:
        df["Act_cat"] = df["Act_cat"]-1
    else: 
        df["Act_cat"] = df["Act_cat"]-0

如果你有更好的主意,请告诉我!

非常感谢.

推荐答案

你可以这样做:

df.loc[df['Act'].eq(4) & df['mean_bout_count'].lt(3), 'Act'] -= 1
    Time ID  Act  mean_bout_count
0      1  1    1              2.3
1      2  1    2              4.0
2      7  1    4              7.0
3     10  1    4              7.0
4     15  1    2              1.0
5     16  2    0              2.0
6     77  2    2              2.2
7     98  2    3              2.1
8    999  2    3              2.1
9   1000  2    1             10.0
10  1121  3    4              3.0
11  1245  3    4              3.0
12  1373  3    1              3.0
13  1490  3    1              3.0
14  1555  3    2              3.0

您的方法存在的问题是,在if范围内执行df["Act_cat"] = df["Act_cat"]-1,每次条件判断为true时,您都会从整列中减go 1.

Python相关问答推荐

大Pandas 胚胎中产生组合

try 与gemini-pro进行多轮聊天时出错

比较2 PD.数组的令人惊讶的结果

如何删除索引过go 的lexsort深度可能会影响性能?' &>

Pandas 有条件轮班操作

运行总计基于多列pandas的分组和总和

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

比Pandas 更好的 Select

你能把函数的返回类型用作其他地方的类型吗?'

合并相似列表

如何设置nan值为numpy数组多条件

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

将相应的值从第2列合并到第1列(Pandas )

Pandas 删除只有一种类型的值的行,重复或不重复

Groupby并在组内比较单独行上的两个时间戳

ValueError:必须在Pandas 中生成聚合值

在Django REST框架中定义的URL获得404分