如果另一列中的值相同,则填写NaN

问题描述

我有以下数据框:

Out[117]: mydata
  author           email           ri                   oi
0      X1             NaN          NaN  0000-0001-8437-498X
1      X2             NaN          NaN                  NaN
2      X3       [email protected]  K-5448-2012  0000-0001-8437-498X
3      X4      [email protected]          NaN  0000-0001-8437-498X
4      X5       [email protected]          NaN  0000-0001-8437-498X

其中列ri代表作者的ResearcherID,列oi代表ORCID。一位作者可能拥有多个电子邮件地址,因此email列中有重复项。

首先,如果ri中的相应行共享相同的值,我尝试使用{{1}中的非NaN值来填充oi中的na }}。我想要的结果是:

ri

第二,,如果 author email ri oi 0 X1 NaN K-5448-2012 0000-0001-8437-498X 1 X2 NaN NaN NaN 2 X3 [email protected] K-5448-2012 0000-0001-8437-498X 3 X4 [email protected] K-5448-2012 0000-0001-8437-498X 4 X5 [email protected] K-5448-2012 0000-0001-8437-498X (或email)中的值相同,则合并电子邮件并使用合并后的值填充ri列中的na。我想获得一个如下数据框:

oi

我尝试了以下代码:

  author                  email           ri                       oi
0      X1   [email protected];[email protected]  K-5448-2012           0000-0001-8437-498X
1      X2                    NaN          NaN                           NaN
2      X3   [email protected];[email protected]  K-5448-2012           0000-0001-8437-498X
3      X4   [email protected];[email protected]  K-5448-2012           0000-0001-8437-498X
4      X5   [email protected];[email protected]  K-5448-2012           0000-0001-8437-498X

此代码在第一步中返回了我想要的代码,但是是否有一种精巧的方法来解决此问题?此外,如何获取final_df = pd.DataFrame() na_df = mydata[mydata.oi.isna()] for i in set(mydata.oi.dropna()): fill_df = mydata[mydata.oi == i] fill_df.ri = fill_df.ri.fillna(method='ffill') fill_df.ri = fill_df.ri.fillna(method='bfill') null_df = pd.concat([null_df,fill_df]) final_df = pd.concat([final_df,na_df]) 中的合并值,然后在email的过程中将合并后的值用作输入?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)