我有一个如下所示的数据框:
import pandas as pd
inp = [{'ID':"a", 'start':100, 'end': 200}, {'ID':"b", 'start':250, 'end': 300},
{'ID':"c", 'start':300, 'end': 300}, {'ID':"d", 'start':350, 'end': 500},
{'ID':"e", 'start':600, 'end': 600}, {'ID':"f", 'start':700, 'end': 900}]
df = pd.DataFrame(inp)
df[['ID','start','end']]
ID start end
0 a 100 200
1 b 250 290
2 c 300 300
3 d 350 500
4 e 600 600
5 f 700 900
我想迭代我的df行并应用一个函数,其中起点和终点列相等(即行2和4),这样我就可以有一个变异的df,如下所示:
ID start end
0 a 100 200
1 b 250 390
2 c 391 300
3 d 350 500
4 e 501 600
5 f 700 900
在mutated df中,start和end值相等,我用前一列+ 1的结束值替换了起始值。
我试图迭代这样的行:
for index, row in df.iterrows():
if(df['start'][i]==df['end'][i]):
df[start'][i]=(df['end'][i-1]+1) # Here I am trying to refer to the end value in the previous row!
else:
df['start'][i]==df[start'][i] # Don't mess with the values if start and end are different!
对于如何解决这个问题的任何暗示/建议,我将不胜感激!
答案 0 :(得分:3)
您不应为可矢量化计算迭代行。
这是通过pd.DataFrame.loc
实现逻辑的一种方式:
df.loc[df['start'] == df['end'], 'start'] = df['end'].shift(1) + 1
# ID end start
# 0 a 200 100.0
# 1 b 300 250.0
# 2 c 300 301.0
# 3 d 500 350.0
# 4 e 600 501.0
# 5 f 900 700.0