如何用条件pandas-python替换另一列中一列的值



Hello(Pandas Python(简而言之,我有一个由用户id列(user_id(组成的数据帧,它的组织在第二列中附加,它的机构在第三列中合并,很明显,在第三列中,所有的都没有合并组织,因此有Na,也可能是重复了相同的base_org,但这一列没有合并,这是所希望的,数据帧看起来是这样的:

Merge_orgNa
User_id Base_org
A 苹果
B Instagram Facebook
C Xbox 微软
谷歌
E Instagram Na

np.where选项:

df['Base_org'] = np.where(
df['Merge_org'].eq('Na'), df['Base_org'], df['Merge_org']
)

df:

User_id   Base_org  Merge_org
0       A      Apple         Na
1       B   Facebook   Facebook
2       C  Microsoft  Microsoft
3       D     Google         Na
4       E  Instagram         Na

尝试:

df['Base_org'] = df.mask(df['Merge_org'] == 'Na')['Merge_org'].fillna(df['Base_org'])
df

输出:

User_id   Base_org  Merge_org
0       A      Apple         Na
1       B   Facebook   Facebook
2       C  Microsoft  Microsoft
3       D     Google         Na
4       E  Instagram         Na

我不知道你的实际意图,但通常最好用基值覆盖合并值中的na,而不是覆盖"基本";具有非null的值合并在值中。

你可以用一个简单的df.loc()语句来解决你的直接问题。

df.loc[df.Merge_org != "Na", 'Base_org'] = df.Merge_org

输出:

User_id   Base_org  Merge_org
0       A      Apple         Na
1       B   Facebook   Facebook
2       C  Microsoft  Microsoft
3       D     Google         Na
4       E  Instagram         Na

这种方法和类似的方法消除了两行的基本值实际上是Instagram和XBox的事实。如果要保留所有三列,那么可以像这样从左到右进行替换,保留原始数据和新数据。

df.loc[df.Merge_org == "Na", 'Merge_org'] = df.Base_org

输出:

User_id   Base_org  Merge_org
0       A      Apple      Apple
1       B  Instagram   Facebook
2       C       Xbox  Microsoft
3       D     Google     Google
4       E  Instagram  Instagram

此输出更适用于调试和进一步开发。

def replace_base_org(base_org, merge_org):
return merge_org if merge_org != 'Na' else base_org 

df['Base_org'] = df.apply(lambda row : replace_base_org(row['Base_org'],row['Merge_org']), axis = 1)

最新更新