相关疑难解决方法(0)

如何在PostgreSQL中进行更新+加入?

基本上,我想这样做:

update vehicles_vehicle v 
    join shipments_shipment s on v.shipment_id=s.id 
set v.price=s.price_per_vehicle;
Run Code Online (Sandbox Code Playgroud)

我很确定它可以在MySQL(我的背景)中工作,但它似乎不适用于postgres.我得到的错误是:

ERROR:  syntax error at or near "join"
LINE 1: update vehicles_vehicle v join shipments_shipment s on v.shi...
                                  ^
Run Code Online (Sandbox Code Playgroud)

当然有一种简单的方法可以做到这一点,但我找不到合适的语法.那么,我如何在PostgreSQL中编写这个?

postgresql syntax

467
推荐指数
6
解决办法
32万
查看次数

熊猫合并101

  • 如何用pandas 执行(LEFT| RIGHT| FULL)(INNER| OUTER)连接?
  • 合并后如何为缺失的行添加NaN?
  • 合并后如何摆脱NaN?
  • 我可以合并索引吗?
  • 如何合并多个DataFrame?
  • mergejoinconcatupdate?谁?什么?为什么?!

... 和更多.我已经看到了这些反复出现的问题,询问了pandas合并功能的各个方面.今天关于合并及其各种用例的大部分信息在几十个措辞严厉,不可搜索的帖子中都是分散的.这里的目的是为后代整理一些更重要的观点.

这个QnA应该是关于常见熊猫习语的一系列有用的用户指南的下一部分(参见关于转动的这篇文章,以及关于连接的这篇文章,我将在稍后介绍).

请注意,这篇文章并不是文档的替代品,所以请阅读它!一些例子来自那里.

python merge join pandas

271
推荐指数
6
解决办法
4万
查看次数

当行具有不同的列集时,按行(rbind)组合两个数据帧

是否可以对两个没有相同列的数据帧进行行绑定?我希望保留绑定后不匹配的列.

r dataframe r-faq

207
推荐指数
8
解决办法
26万
查看次数

R - 连接两个数据帧?

给出两个数据帧ab:

> a
           a           b           c
1 -0.2246894 -1.48167912 -1.65099363
2  0.5559320 -0.87898575 -0.15634590
3  1.8469466 -0.01487524 -0.53098215
4 -0.6875051  0.23880967  0.01824621
5 -0.6735163  0.75485292  0.44154092


> b
           a          c
1  0.4287284 -0.3295925
2  0.5201492  0.3341251
3 -2.6355570  1.7916780
4 -1.3645337  1.3642276
5 -0.4954542 -0.6660001
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法来连接这些以便返回下面表单的新数据框?

> new
           a                   b           c
1  -0.2246894   -1.48167912106676 -1.65099363
2   0.5559320  -0.878985746842256 -0.15634590
3   1.8469466 -0.0148752354840942 -0.53098215
4  -0.6875051   0.238809666690982  0.01824621
5  -0.6735163   0.754852923524198  0.44154092
6   0.4287284                  NA -0.32959248
7 …
Run Code Online (Sandbox Code Playgroud)

r concatenation dataframe

115
推荐指数
5
解决办法
24万
查看次数

为什么X [Y]连接data.tables不允许完全外连接或左连接?

这是关于data.table连接语法的一个哲学问题.我发现data.tables的用途越来越多,但仍在学习......

X[Y]data.tables 的连接格式非常简洁,方便和高效,但据我所知,它只支持内连接和右外连接.要获得左外部或全外部连接,我需要使用merge:

  • X[Y, nomatch = NA] - Y中的所有行 - 右外连接(默认)
  • X[Y, nomatch = 0] - 只有在X和Y中都匹配的行 - 内连接
  • merge(X, Y, all = TRUE) - 来自X和Y的所有行 - 完全外部连接
  • merge(X, Y, all.x = TRUE) - X中的所有行 - 左外连接

在我看来,如果X[Y]连接格式支持所有4种类型的连接,那将会很方便.有没有理由只支持两种类型的连接?

对我来说,nomatch = 0nomatch = NA参数值对于正在执行的操作不是非常直观.这是我更容易理解和记忆的merge语法:all = TRUE,all.x = TRUEall.y = TRUE.由于X[Y]操作类似于merge远远不止match,为什么不使用merge的连接,而不是语法match功能的nomatch参数?

以下是4种连接类型的代码示例:

# …
Run Code Online (Sandbox Code Playgroud)

join r data.table

115
推荐指数
3
解决办法
3万
查看次数

在R中合并/加入data.frames的最快方法是什么?

例如(不确定是否最具代表性的例子):

N <- 1e6
d1 <- data.frame(x=sample(N,N), y1=rnorm(N))
d2 <- data.frame(x=sample(N,N), y2=rnorm(N))
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所得到的:

d <- merge(d1,d2)
# 7.6 sec

library(plyr)
d <- join(d1,d2)
# 2.9 sec

library(data.table)
dt1 <- data.table(d1, key="x")
dt2 <- data.table(d2, key="x")
d <- data.frame( dt1[dt2,list(x,y1,y2=dt2$y2)] )
# 4.9 sec

library(sqldf)
sqldf()
sqldf("create index ix1 on d1(x)")
sqldf("create index ix2 on d2(x)")
d <- sqldf("select * from d1 inner join d2 on d1.x=d2.x")
sqldf()
# 17.4 sec
Run Code Online (Sandbox Code Playgroud)

performance merge join r data.table

94
推荐指数
4
解决办法
4万
查看次数

如何基于两列组合两个数据帧?

我知道我可以使用它plyr和它的朋友组合数据帧,merge但是到目前为止我不知道如何根据2列合并两个数据帧和多列?

merge r dataframe

94
推荐指数
3
解决办法
23万
查看次数

如何判断一个向量而不是另一个向量?

在matlab中,有一种方法可以在一个向量中找到值,但在另一个向量中却找不到.

例如:

x <- c(1,2,3,4)
y <- c(2,3,4)
Run Code Online (Sandbox Code Playgroud)

是那里会告诉我,在价值的任何功能x,在不y为1?

r vector

74
推荐指数
6
解决办法
6万
查看次数

如何进行data.table合并操作

注意:这个问题和以下答案涉及data.table版本<1.5.3; v.1.5.3于2011年2月发布以解决此问题.查看更新的处理(03-2012):将外键上的SQL连接转换为R data.table语法


我一直在挖掘data.table包的文档(data.frame的替代品,对于某些操作来说效率更高),包括Josh Reich在纽约R Meetup(pdf)上关于SQL和data.table的演示,但是无法想象这完全琐碎的操作.

> x <- DT(a=1:3, b=2:4, key='a')
> x
     a b
[1,] 1 2
[2,] 2 3
[3,] 3 4
> y <- DT(a=1:3, c=c('a','b','c'), key='a')
> y
     a c
[1,] 1 a
[2,] 2 b
[3,] 3 c
> x[y]
     a b
[1,] 1 2
[2,] 2 3
[3,] 3 4
> merge(x,y)
  a b c
1 1 2 a
2 2 3 b …
Run Code Online (Sandbox Code Playgroud)

merge r data.table

49
推荐指数
3
解决办法
8万
查看次数

滚动连接R中的data.table

我试图更多地了解滚动连接的工作方式和一些混乱,我希望有人可以为我澄清这一点.举一个具体的例子:

dt1 <- data.table(id=rep(1:5, 10), t=1:50, val1=1:50, key="id,t")
dt2 <- data.table(id=rep(1:5, 2), t=1:10, val2=1:10, key="id,t")
Run Code Online (Sandbox Code Playgroud)

我希望这会生成一个long data.table,其中值为dt2:

dt1[dt2,roll=TRUE]
Run Code Online (Sandbox Code Playgroud)

相反,正确的方法似乎是:

dt2[dt1,roll=TRUE]
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释更多关于如何加入data.table作品,因为我显然没有正确理解它.我认为这dt1[dt2,roll=TRUE]对应于sql等价select * from dt1 right join dt2 on (dt1.id = dt2.id and dt1.t = dt2.t),除了增加的功能locf.

另外文档说:

X[Y] is a join, looking up X's rows using Y (or Y's key if it has one) 
as an index.
Run Code Online (Sandbox Code Playgroud)

这使得似乎只返回X中的内容,正在进行的连接是内连接,而不是外连接.roll=T那个什么时候但那个特别id不存在dt1?多玩一点我无法理解列中放置了什么值.

join r time-series data.table

43
推荐指数
1
解决办法
1万
查看次数