Python 查找df值在其他df的bin范围内的索引
我试图在一个数据帧中创建一个新的列df2[“v2”],其中填充了来自不同数据帧df1[“v1”]的值 第一个数据帧保存在df1[“T1”]中存储的时间测量值1的值。第二个数据帧现在应该存储测量值1中的值,但具有不同的时间采样。在现实任务中,时间采样不是均匀分布的(也不是单调增加的,至少在默认情况下是如此) 这样做的愚蠢方式可能是:Python 查找df值在其他df的bin范围内的索引,python,pandas,dataframe,Python,Pandas,Dataframe,我试图在一个数据帧中创建一个新的列df2[“v2”],其中填充了来自不同数据帧df1[“v1”]的值 第一个数据帧保存在df1[“T1”]中存储的时间测量值1的值。第二个数据帧现在应该存储测量值1中的值,但具有不同的时间采样。在现实任务中,时间采样不是均匀分布的(也不是单调增加的,至少在默认情况下是如此) 这样做的愚蠢方式可能是: df2["v2"] = pd.Series() for n in range(df1["T1"].size-1): t1
df2["v2"] = pd.Series()
for n in range(df1["T1"].size-1):
t1 = df1["T1"].iloc[n]
t2 = df1["T1"].iloc[n+1]
mask = (t1 <= df2["T2"]) & (df2["T2"] < t2)
df2["v2"].loc[mask]= df1["v1"].iloc[n]
达到同样效果的最快/最优雅的方法是什么?以下是解决问题的一种方法:
bins = pd.cut(df1['T1'], df1['T1'], right=False)
mapping = df1[:-1].set_index(bins[:-1])['v1']
df2['v2'] = df2['T2'].map(mapping)
详细信息:
将T1
列中的值分类为离散区间,以T1
列本身为特征:
>>> bins
0 [0.0, 5.0)
1 [5.0, 10.0)
2 [10.0, 15.0)
3 NaN
Name: T1, dtype: category
Categories (3, interval[int64]): [[0, 5) < [5, 10) < [10, 15)]
map
在上述map
系列的帮助下,T2
列中的值:
>>> mapping
T1
[0, 5) 0
[5, 10) 1
[10, 15) 2
Name: v1, dtype: int64
>>> df2
T2 v2
0 0 0
1 1 0
2 2 0
3 3 0
4 4 0
5 5 1
6 6 1
7 7 1
8 8 1
9 9 1
10 10 2
11 11 2
12 12 2
13 13 2
14 14 2
请同时发布预期输出。此外,在您发布的代码中,您参考了
df
,而您创建的两个数据帧分别称为df1
和df2
。谢谢,更正了输入错误并添加了输出。
>>> mapping
T1
[0, 5) 0
[5, 10) 1
[10, 15) 2
Name: v1, dtype: int64
>>> df2
T2 v2
0 0 0
1 1 0
2 2 0
3 3 0
4 4 0
5 5 1
6 6 1
7 7 1
8 8 1
9 9 1
10 10 2
11 11 2
12 12 2
13 13 2
14 14 2