我有一个数据框,其中包含名为“id”、“x”、“y”和“time”的列
我想向数据框添加两列,以便它们具有来自具有相同 ID 和时间 + 2 的另一行的 x 和 y 的值
结果应该是这样的:
请注意dataframe没有按id排序
我已经为 x2 尝试了以下方法,但它没有按预期工作:
t=2
data['x2'] = data.apply(lambda x: x['x'] if (data[(data['id']==x['id']) & ((data['time']+t) == x['time'])].size > 0) else '', axis=1)
下面的工作,但我需要使用一种快捷方式和性能最好的方式,因为我的数据量很大
t=2
for index, row in data.iterrows():
rowT = data[(data['id']==row['id']) & (data['time'] == (row['time'] + t))]
if rowT.size > 0:
data.loc[index,'x2'] = rowT['x'].values[0]
最佳答案
您可以通过使用 t-2
秒的值重新填充 time
列中的值来创建新数据框,然后是 left 合并
这个新数据帧与id, time
列上的原始数据帧以获得结果:
df_r = df.assign(time=df['time'].sub(2))
df.merge(df_r, on=['id', 'time'], how='left', suffixes=['', '2'])
id time x y x2 y2
0 1 0 14 12 52.0 14.0
1 1 1 32 23 NaN NaN
2 1 2 52 14 NaN NaN
3 2 2 12 34 NaN NaN
4 3 0 62 17 22.0 25.0
5 3 1 82 35 NaN NaN
6 3 2 22 25 NaN NaN
关于python - Pandas 根据条件将列添加到具有另一行值的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66075585/