python - Pandas 根据条件将列添加到具有另一行值的数据框

标签 python pandas dataframe lambda

我有一个数据框,其中包含名为“id”、“x”、“y”和“time”的列

<表类="s-表"> <头> id <次>次 x <日>是 <正文> 1 0 14 12 1 1 32 23 1 2 52 14 2 2 12 34 3 0 62 17 3 1 82 35 3 2 22 25

我想向数据框添加两列,以便它们具有来自具有相同 ID 和时间 + 2 的另一行的 x 和 y 的值

结果应该是这样的:

<表类="s-表"> <头> id <次>次 x <日>是 x2 y2 <正文> 1 0 14 12 52 14 1 1 32 23 1 2 52 14 2 2 12 34 3 0 62 17 22 25 3 1 82 35 3 2 22 25

请注意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/

相关文章:

python - numpy 的 ones_like 的 pandas 版本

python - 检查多列的条件并创建新列

替换数据帧的非零值

python - 删除表达式树中第一个元素及其在 Python 中的每个子表达式树中的括号

python - 设置emacs劣质进程提示位置

python - Pandas - 合并多列并求和

python - Pandas:如何从 CSV 文件中读取特定行

python - 对 Pandas 数据框中的元素进行排名

python - 在 Python 中用子类替换成员对象

python - mariadb 10.2 中的 EPF 导入器错误 - 编码?