Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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,您好,我正在尝试使用merge函数更新分母表的一列。桌子就是这样的 Table A A B C D E 1 2 5 2 a 2 2 5 3 a 3 3 6 4 c 4 4 4 1 c 700rows Table B A B C D E 1 2 5 2 c 2 2 5 3 c 3 3 6 4 c 500rows 第一个表是我从DB获得的,固定数量的记录需要用作分母,因此总行数不能更改,第二个表是我也从另一台服务器提取的,更新信息为E列。表B的行数小于行数(固定)我只想从表B中尽可能多地

您好,我正在尝试使用merge函数更新分母表的一列。桌子就是这样的


Table A
A B C D E 
1 2 5 2 a
2 2 5 3 a
3 3 6 4 c
4 4 4 1 c
700rows

Table B
A B C D E 
1 2 5 2 c
2 2 5 3 c
3 3 6 4 c

500rows
第一个表是我从DB获得的,固定数量的记录需要用作分母,因此总行数不能更改,第二个表是我也从另一台服务器提取的,更新信息为E列。表B的行数小于行数(固定)我只想从表B中尽可能多地更新表A中的E列。我尝试了所有类型的联接,它们在更新后会更改行号,您有什么想法可以通过合并函数或其他方法解决吗

输出应为:

A B C D E 
1 2 5 2 c
2 2 5 3 c
3 3 6 4 c
4 4 4 1 c
700 rows
表A的行号不会更改。但仅列E的行号会由表B中的相同记录(如果存在)更新


非常感谢你

我不认为这是最优雅的方式,但这段代码应该适用于R:

TableA=data.frame(A=c(1,2,3,4),B=c(2,2,3,4),c=c(5,5,6,4),D=c(2,3,4,1),E=c(“A”,“A”,“c”,“c”))
表B=数据帧(A=c(1,2,3,4),B=c(2,2,3,4),c=c(5,5,6,4),D=c(2,3,4,1),E=c(“c”,“c”,“c”,“c”))
使用
for
循环测试每一行
TableA
与每一行
TableB
的对比,并将
TableA
E
列替换为
TableB
E列(对于a、B、C、D列):

for(1中的i:nrow(表b))
{
如果(长度(grep(FALSE,TableB[i,c(1:4)]==TableA[i,c(1:4)])==0){TableA[i,E]=TableB[i,E]}
else{}
}
以及输出:

>表a
A、B、C、D、E
1 1 2 5 2 c
2 2 5 3 c
3 3 6 4 c
4 1 c

它回答了您的问题吗?

在R中,我认为您可以执行
左键联接
以保持第一个数据集中的行不变,然后使用
合并
B
数据集中(如果存在)或从
A
选择值

library(dplyr)
left_join(A, B, by  = c("A", "B", "C", "D")) %>%
  mutate(E = coalesce(E.y, E.x)) %>%
  select(-E.x, -E.y)

#  A B C D E
#1 1 2 5 2 c
#2 2 2 5 3 c
#3 3 3 6 4 c
#4 4 4 4 1 c
数据

假设
A
B
是两个数据集

A <- structure(list(A = 1:4, B = c(2L, 2L, 3L, 4L), C = c(5L, 5L, 
6L, 4L), D = c(2L, 3L, 4L, 1L), E = structure(c(1L, 1L, 2L, 2L
), .Label = c("a", "c"), class = "factor")), class = "data.frame", 
row.names = c(NA, -4L))

B <- structure(list(A = 1:3, B = c(2L, 2L, 3L), C = c(5L, 5L, 6L), 
D = 2:4, E = structure(c(1L, 1L, 1L), .Label = "c", class = "factor")),
class = "data.frame", row.names = c(NA, -3L))

A我想这不是一个R问题,为什么R和sql的标题是pandas?只是想看看是否有人也可以在R中求解,或者我可以在sql中上传这两个表以在sql中求解。我现在只是想用熊猫来解决问题。非常感谢,dplyr几乎解决了99%的问题,只添加了5到6个副本就可以了。@YueShang很高兴能帮上忙!如果您觉得投票按钮对您有用,请单击投票按钮旁边的复选标记,随时进行投票。:-)每个帖子只能接受一个答案。