Python 熊猫-在最小三角形后的第一排加入
我有以下两个数据帧Python 熊猫-在最小三角形后的第一排加入,python,pandas,join,dataframe,merge,Python,Pandas,Join,Dataframe,Merge,我有以下两个数据帧 x = pd.DataFrame.from_dict({'val':['A', 'B', 'C', 'D'], 'time':[10, 15, 17, 18]}) time val 0 10 A 1 15 B 2 17 C 3 18 D y = pd.DataFrame.from_dict({'val':['x', 'y', 'z', 't'], 'time':[11, 12.1, 16, 22]}) time val 0
x = pd.DataFrame.from_dict({'val':['A', 'B', 'C', 'D'], 'time':[10, 15, 17, 18]})
time val
0 10 A
1 15 B
2 17 C
3 18 D
y = pd.DataFrame.from_dict({'val':['x', 'y', 'z', 't'], 'time':[11, 12.1, 16, 22]})
time val
0 11.0 x
1 12.1 y
2 16.0 z
3 22.0 t
我想将x中的每一行连接到y中至少2秒后发生的第一行:
time_x val_x time_y val_y
0 10 A 12.1 y
1 15 B 22.0 t
2 17 C 22.0 t
3 18 D 22.0 t
这可能会减慢大数据帧的速度,但您可以使用“应用”在x上创建一个新列,并在该列上进行连接:
x['ytime']=x.time.apply(lambda i: y.time[y.time>=i+2].min())
time val ytime
0 10 A 12.1
1 15 B 22.0
2 17 C 22.0
3 18 D 22.0
x.merge(y, how='left', left_on='ytime', right_on='time').drop('ytime', axis=1)
time_x val_x time_y val_y
0 10 A 12.1 y
1 15 B 22.0 t
2 17 C 22.0 t
3 18 D 22.0 t
这可能会减慢大数据帧的速度,但您可以使用“应用”在x上创建一个新列,并在该列上进行连接:
x['ytime']=x.time.apply(lambda i: y.time[y.time>=i+2].min())
time val ytime
0 10 A 12.1
1 15 B 22.0
2 17 C 22.0
3 18 D 22.0
x.merge(y, how='left', left_on='ytime', right_on='time').drop('ytime', axis=1)
time_x val_x time_y val_y
0 10 A 12.1 y
1 15 B 22.0 t
2 17 C 22.0 t
3 18 D 22.0 t
谢谢你,伊恩。一个小问题:你的解决方案是否完全依赖于x和y具有相同的长度,或者它们的指数具有可比性?不,一点也不。索引可以是完全任意的,每个数据帧可以是任意长度,甚至可以是0。只有x时间和y时间可以比较。我唯一要注意的是,如果y中没有下一个最大值,在这种情况下,所有内容仍将完整无误,但结果数据帧中的值将为NaN。谢谢Ian。一个小问题:你的解决方案是否完全依赖于x和y具有相同的长度,或者它们的指数具有可比性?不,一点也不。索引可以是完全任意的,每个数据帧可以是任意长度,甚至可以是0。只有x时间和y时间可以比较。我唯一要注意的是,如果y中没有下一个最大值,在这种情况下,所有内容仍将完整无误,但结果数据帧中的值将为NaN。