Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用条件替换另一列的值_Python_Pandas - Fatal编程技术网

Python 如何用条件替换另一列的值

Python 如何用条件替换另一列的值,python,pandas,Python,Pandas,Hello(Pandas Python)简而言之,我有一个由用户id列(user_id)组成的数据框,它的组织附在第二列,它的组织合并在第三列,显然,在第三列中,所有组织都没有合并,因此有Na。也可能是相同的基本组织被重复,但这一个没有合并,这是需要的,数据框如下所示: 用户id 基地组织 合并组织 A. 苹果 Na B 一款图片分享应用 脸谱网 C Xbox 微软 D 谷歌 Na E 一款图片分享应用 Na 尝试: 输出: User_id Base_org Merge_org 0

Hello(Pandas Python)简而言之,我有一个由用户id列(user_id)组成的数据框,它的组织附在第二列,它的组织合并在第三列,显然,在第三列中,所有组织都没有合并,因此有Na。也可能是相同的基本组织被重复,但这一个没有合并,这是需要的,数据框如下所示:

用户id 基地组织 合并组织 A. 苹果 Na B 一款图片分享应用 脸谱网 C Xbox 微软 D 谷歌 Na E 一款图片分享应用 Na 尝试:

输出:

  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
  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
  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
  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
一个选择:

df


我不知道您的实际意图,但通常最好使用基本值覆盖合并值中的na,而不是使用非空的合并值覆盖“基本”值

您可以通过一个简单的
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
  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
  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
  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
这种方法和类似的方法消除了一个事实,即两行的基本值实际上是Instagram和XBox。如果要保留所有三列,则可以像这样从左到右进行替换,保留原始数据和新数据

df.loc[df.Merge_org == "Na", 'Merge_org'] = df.Base_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
  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
  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
  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

这个输出对于调试和进一步开发来说效果更好。

确实,正如您所说的那样,它更简单,当时我似乎很清楚,但使用您的方法后,它极大地促进了我的任务。谢谢您。为什么您会接受一个更难编码、执行时间更长的答案?因为这是一个我可以在需要时通过类调用的函数。但是你的答案也很相关谢谢你的回答,我不知道应用的功能,我意识到它非常有用!对不起,这是我的一个符号错误。你的答案是正确的:)