获取满足条件的最后一个可用值

2024-09-29 21:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由两个初始列组成的数据框架:一列分析称为“分析1”,另一列与这些分析相关联的数字称为“数字1”

^{tb1}$

然后我添加了另一列,其中充满了如下所示的数字。我叫它“2号”

^{tb2}$

我想做的是创建一个名为“Analysis2”的新列。在本专栏中,我希望得到与“数字2”中的数字相对应的最后可用分析(包含在分析1中)

例如:

-第1行:数字80的最后可用分析是51,因此我在新列中写51

-第3行:数字81的最后可用分析是52,因此我在新列中写52

-第6行:数字82的最后可用分析是54,因此我在新列中写54

这应该是这样的:

^{tb3}$

我尝试使用mask()是基于数字1等于数字2的条件,但它不起作用。事实上,正如你所看到的,这个条件并不总是满足的

你有什么办法解决我的问题吗?希望它足够清楚

编辑:我试图构建一个如下所示的功能:

def analyse_correction(analyse_nc,analyse_corrected,number):
    df[analyse_corrected]=df[analyse_nc].mask(df['Number 1']!=df['Number 2'])
    df[analyse_corrected].fillna(method='ffill',inplace=True)
    df[analyse_corrected].fillna(method='bfill',inplace=True)

这个函数的问题是我使用的条件并不总是满足


Tags: 数据框架truenumberdfmask数字条件
1条回答
网友
1楼 · 发布于 2024-09-29 21:28:35

试试这个:

mapper = df.drop_duplicates('Number 1', keep='last').set_index('Number 1')['Analysis 1']

df['Analysis 2'] = df['Number 2'].map(mapper)
df

输出:

  Date (DD/MM/AA)  Number 1  Analysis 1  Number 2  Analysis 2
0      2021-01-01        80          51        80          51
1      2021-02-01        81          52        80          51
2      2021-03-01        83          53        81          52
3      2021-04-01        82          54        81          52
4      2021-05-01        83          55        81          52
5      2021-06-01        84          56        82          54

相关问题 更多 >

    热门问题