小编Net*_*ian的帖子

找出两个表之间的差异

我正在使用SAS/SQL背景中的R,我正在尝试编写代码来获取两个表,比较它们,并提供差异列表.此代码将重复用于许多不同的表集,因此我需要避免硬编码.

我正在使用识别R中两个数据集之间的特定差异,但它并没有让我一路走来.

示例数据,使用LastName/FirstName(唯一)的组合作为键 -

Dataset One --

Last_Name  First_Name  Street_Address   ZIP     VisitCount
Doe        John        1234 Main St     12345   20
Doe        Jane        4321 Tower St    54321   10
Don        Bob         771  North Ave   23232   5
Smith      Mike        732 South Blvd.  77777   3        

Dataset Two --

Last_Name  First_Name  Street_Address   ZIP     VisitCount
Doe        John        1234 Main St     12345   20
Doe        Jane        4111 Tower St    32132   17
Donn       Bob         771  North Ave   11111   5

   Desired Output --

   LastName FirstName VarName         TableOne        TableTwo
   Doe …
Run Code Online (Sandbox Code Playgroud)

r dataframe

14
推荐指数
2
解决办法
2440
查看次数

R Data.Table加入条件

我有两个表,我想以一种等同于以下SQL的方式连接在一起,在这里我加入多个条件,而不仅仅是相等.

require(sqldf)
require(data.table)

dt <- data.table(num=c(1, 2, 3, 4, 5, 6), 
char=c('A', 'A', 'A', 'B', 'B', 'B'), 
bool=c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE))

dt_two <- data.table(
num =c(6, 1, 5, 2, 4, 3), 
char=c('A', 'A', 'A', 'B', 'B', 'B'), 
bool=c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE))


dt_out_sql <- sqldf('
    select dtone.num, dtone.char, dtone.bool, SUM(dttwo.num) as SUM,  
   MIN(dttwo.num) as MIN
    from dt as dtone INNER join dt_two as dttwo on 
    (dtone.char = dttwo.char) and 
    (dtone.num >= dttwo.num OR dtone.bool)
GROUP BY dtone.num, …
Run Code Online (Sandbox Code Playgroud)

r data.table

10
推荐指数
2
解决办法
2980
查看次数

在 Pandas 数据框中组合日期范围

我在 Python 中有一组记录,其中包含一个 id、至少一个属性和一组日期范围。我想要采用每个 id 的代码,并组合属性匹配且日期范围内没有间隙的所有记录。

日期范围没有间隔,我的意思是一个记录的结束日期大于或等于该 ID 的下一个记录。

例如,ID 为“10”、开始日期为“2016-01-01”和结束日期为“2017-01-01”的记录可以与具有该 ID、开始日期为“2017-01-01”的另一条记录合并”,结束日期为“2018-01-01”,但它不能与从“2017-01-10”开始的记录合并,因为从 2017-01-01 到 2017 会有一个间隔-01-09。

这里有些例子 -

有:

FruitID,FruitType,StartDate,EndDate
1,Apple,2015-01-01,2016-01-01
1,Apple,2016-01-01,2017-01-01
1,Apple,2017-01-01,2018-01-01
2,Orange,2015-01-01,2016-01-01
2,Orange,2016-05-31,2017-01-01
2,Orange,2017-01-01,2018-01-01
3,Banana,2015-01-01,2016-01-01
3,Banana,2016-01-01,2017-01-01
3,Blueberry,2017-01-01,2018-01-01
4,Mango,2015-01-01,2016-01-01
4,Kiwi,2016-09-15,2017-01-01
4,Mango,2017-01-01,2018-01-01
Run Code Online (Sandbox Code Playgroud)

想:

FruitID,FruitType,NewStartDate,NewEndDate
1,Apple,2015-01-01,2018-01-01
2,Orange,2015-01-01,2016-01-01
2,Orange,2016-05-31,2018-01-01
3,Banana,2015-01-01,2017-01-01
3,Blueberry,2017-01-01,2018-01-01
4,Mango,2015-01-01,2016-01-01
4,Kiwi,2016-09-15,2017-01-01
4,Mango,2017-01-01,2018-01-01
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案如下。它提供了我正在寻找的结果,但对于大型数据集,性能似乎并不好。此外,我的印象是您通常希望尽可能避免迭代数据帧的各个行。非常感谢您提供的任何帮助!

import pandas as pd
from dateutil.parser import parse

have = pd.DataFrame.from_items([('FruitID', [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]),
                                ('FruitType', ['Apple', 'Apple', 'Apple', 'Orange', 'Orange', 'Orange', 'Banana', 'Banana', 'Blueberry', 'Mango', 'Kiwi', 'Mango']),
                                ('StartDate', …
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
3117
查看次数

标签 统计

r ×2

data.table ×1

dataframe ×1

pandas ×1

python ×1