gpt4 book ai didi

python - Pandas 在匹配列中以不同的间隔加入数据帧

转载 作者:太空宇宙 更新时间:2023-11-04 11:08:21 24 4
gpt4 key购买 nike

我什至不知道如何正确地提出问题。我有两个 Pandas 数据框:

data = {'ID':['A1','A1','A2','A2','A2'], 'FROM':[0,2,0,2,4], 'TO':[2,4,2,4,6], 'PYR' : [0.25,0.11,0.05,0,0.5]}

df = pd.DataFrame(data, columns = ['ID', 'FROM', 'TO', 'PYR'])

所以 df 看起来像这样:

   ID  FROM  TO   PYR
0 A1 0 2 0.25
1 A1 2 4 0.11
2 A2 0 2 0.05
3 A2 2 4 0.00
4 A2 4 6 0.50

第二个:

new_data = {'ID':['A1','A2','A2'], 'FROM':[0, 0, 3.5], 'TO':[4, 3.5, 6], 'STRAT':['TD3', 'J1','J2']}

df2 = pd.DataFrame(new_data, columns = ['ID', 'FROM', 'TO', 'STRAT'])

ID FROM TO STRAT
0 A1 0.0 4.0 TD3
1 A2 0.0 3.5 J1
2 A2 3.5 6.0 J2

我想要做的是将 STRAT 从第二个数据帧添加到第一个数据帧。两个数据帧的每个 id 都有相同的完整范围,但各个间隔明显不同。

我想要的是以这样一种方式填充 STRAT,如果它与第一个数据帧的间隔重叠超过 50%,它将被分配给该间隔,因此预期结果如下所示:

   ID  FROM  TO   PYR STRAT
0 A1 0 2 0.25 TD3
1 A1 2 4 0.11 TD3
2 A2 0 2 0.05 J1
3 A2 2 4 0.00 J1
4 A2 4 6 0.50 J2

我不太确定如何处理这个问题。如果有人能指出我正确的方向,我将不胜感激。谢谢!

最佳答案

您可以做的是:合并数据框,然后过滤超出预期间隔的内容。这将是:

# Merge
df = df.merge(df2, on='ID', suffixes=('_1', '_2'))

# Calculate interval overlap
amount_overlap = (df[['TO_1', 'TO_2']].min(axis=1) -
df[['FROM_2', 'FROM_1']].max(axis=1))

# Filter rows where overlap under 50% of df TO-FROM interval
df = df[(amount_overlap)/(df.TO_1 - df.FROM_1) > 0.5]

如有必要,您可以还原列名:

df = df.rename(columns={'TO_1':'TO', 'FROM_1': 'FROM'})

并删除不必要的列:

df = df.drop(['TO_2', 'FROM_2'], axis=1)

关于python - Pandas 在匹配列中以不同的间隔加入数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com