pandas 根据多个条件遍历行,然后从列中减去?
pandas iterate through rows based on multiple conditions and then subtract from column?
我有一个 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_cat”== 4 和“mean_bout_count”< 3 的每一行,我想从“Act_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
.[=15 时,您都会从整列中减去 1 =]
我有一个 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_cat”== 4 和“mean_bout_count”< 3 的每一行,我想从“Act_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
.[=15 时,您都会从整列中减去 1 =]