我有下面的框架,其中包含对应于列设置的值-
import pandas as pd
data_0 = {'setting':[0,0,0,0,1,1,1,2,2,2,2,2,2],
'values': [0, 1, 2, 3, 0, 1, 2, 0,1,2,3, 5,6]
}
df_0 = pd.DataFrame(data_0)
字符串
我有另一个包含每个设置的相关起始值和结束值的框架-
data_1 = {'setting':[0,1,2,2],
'start_value': [1,0,1,3],
'end_value':[3,2,3,6]
}
df_1 = pd.DataFrame(data_1)
型
现在,我想根据df_1中的start_value和end_value从df_0中提取值。
最后的输出应该是这样的-
data_2 = {'setting':[0,0,1,1,2,2,2,2],
'start_value': [1,1,0,0,1,1,3,3],
'end_value':[3,3,2,2,3,3,6,6],
'values_from_data_0':[1,2,0,1,1,2,3,5]
}
df_2 = pd.DataFrame(data_2)
setting start_value end_value values_from_data_0
0 0 1 3 1
1 0 1 3 2
2 1 0 2 0
3 1 0 2 1
4 2 1 3 1
5 2 1 3 2
6 2 3 6 3
7 2 3 6 5
的字符串
请注意,缺少的值4对应于列setting = 2
。
这是我的天真(和错误)的尝试-
import numpy as np
list_final = []
for index, row in df_1.iterrows():
value_start = row['start_value']
value_end = row['end_value']
assert value_start<value_end
values = np.arange(value_start, value_end)
list_final.append(values)
df_1["values_from_data_0"] = list_final
df_1 = df_1.explode('values_from_data_0')
print(df_1)
型
这几乎是正确的。但是,由于它没有从df_0
中获取值,而是使用arange
,因此结果是错误的。
3条答案
按热度按时间cu6pst1q1#
假设设置中的间隔不重叠,则需要使用
merge_asof
:字符串
或者,使用
janitor
的conditional_join
:型
输出量:
型
vngu2lb82#
验证码
字符串
输出:
型
n9vozmp43#
按照您的
explode
方法,您可以使用以下方法:字符串
输出量:
型