我有两个DataFrame,我想要合并它们。
df1:
df2:
如果我在姓名列上合并,最后一行的年龄不在区间列((0, 10])中。
我真正想做的是根据年龄和年龄范围这两个键/列进行合并。 问题在于年龄是一个包含浮点数的列,而年龄范围是一个包含pandas区间的列。 很遗憾,无法像这样进行合并:
这只会导致一个带有NaN值的薪水列。 要得到我想要的结果,目前我必须根据姓名进行合并,然后执行类似以下操作:
有没有办法使用第一个数据框中浮点列的键和第二个数据框中的pandas区间列进行合并?(编辑:将df1中的年龄值从17替换为17.5,以使其成为浮点列而不是整数列)
import pandas as pd
df1=pd.DataFrame.from_dict({
'names':['klas','erik','stefan'],
'age':[6,17.5,28]
})
df2=pd.DataFrame.from_dict(
{'salary':[10,15,45,600],
'names':['klas','erik','stefan','stefan'],
'age_range':pd.IntervalIndex.from_tuples([(0,10),(10,20),(20,30),(0,10)])
})
df1:
names age
0 klas 6
1 erik 17.5
2 stefan 28
df2:
salary names age_range
0 10 klas (0, 10]
1 15 erik (10, 20]
2 45 stefan (20, 30]
3 600 stefan (0, 10]
如果我在姓名列上合并,最后一行的年龄不在区间列((0, 10])中。
m1=df1.merge(df2,on='names',how='left')
print(m1)
names age salary age_range
0 klas 6 10 (0, 10]
1 erik 17.5 15 (10, 20]
2 stefan 28 45 (20, 30]
3 stefan 28 600 (0, 10]
我真正想做的是根据年龄和年龄范围这两个键/列进行合并。 问题在于年龄是一个包含浮点数的列,而年龄范围是一个包含pandas区间的列。 很遗憾,无法像这样进行合并:
df1.merge(df2,left_on=['age','names'],right_on=['age_range','names'],how='left')
这只会导致一个带有NaN值的薪水列。 要得到我想要的结果,目前我必须根据姓名进行合并,然后执行类似以下操作:
def check_if_age_between(age,age_range):
return age in age_range
f1=lambda row: check_if_age_between(row['age'],row['age_range'])
m1=m1[m1.apply(f1,axis=1)]
print(m1)
names age salary age_range
0 klas 6 10 (0, 10]
1 erik 17.5 15 (10, 20]
2 stefan 28 45 (20, 30]
有没有办法使用第一个数据框中浮点列的键和第二个数据框中的pandas区间列进行合并?(编辑:将df1中的年龄值从17替换为17.5,以使其成为浮点列而不是整数列)
conditional_join
应该在这里有所帮助。 - undefined