Pandas 比较Python中的两个数据帧&;R使用一个键变量

Pandas 比较Python中的两个数据帧&;R使用一个键变量,pandas,dataframe,Pandas,Dataframe,下面列出了两个数据帧df1和df2 ID Age Weight 1 30 62 2 40 80 3 28 77 4 35 70 ID Age Weight 1 30 62 2 40 80 3 28 97 4 35 87 5 25 65 6 33 70 我想使用ID字段将df1中的权重变量与df2进行比较,我需要下面显示的差异 ID Weight_df1 Weight_df2 3 77 97 4

下面列出了两个数据帧
df1
df2

ID  Age Weight
1   30  62
2   40  80
3   28  77
4   35  70

ID  Age Weight
1   30  62
2   40  80
3   28  97
4   35  87
5   25  65
6   33  70
我想使用
ID
字段将
df1
中的权重变量与
df2
进行比较,我需要下面显示的差异

ID  Weight_df1  Weight_df2
3     77             97
4     70             87

下面是R中的一种
tidyverse
方法,它将完成所有工作

library(dplyr)
library(purrr)
library(tidyr)

map_dfr(list(df1, df2), I, .id = "df") %>%
  group_by(ID, Age, Weight) %>%
  filter(n() == 1) %>%
  group_by(ID) %>%
  filter(n() > 1) %>%
  pivot_wider(id_cols = "ID", values_from = "Weight", names_from = "df", names_prefix = "Weight_df")

# A tibble: 2 x 3
# Groups:   ID [2]
     ID Weight_df1 Weight_df2
  <dbl>      <dbl>      <dbl>
1     3         77         97
2     4         70         87
库(dplyr)
图书馆(purrr)
图书馆(tidyr)
map_dfr(列表(df1,df2),I,.id=“df”)%>%
分组依据(ID、年龄、体重)%>%
筛选器(n()==1)%>%
分组依据(ID)%>%
过滤器(n()>1)%>%
枢轴(id\u cols=“id”、值来自于=“Weight”、名称来自于=“df”、名称前缀=“Weight\u df”)
#一个tibble:2x3
#组别:ID[2]
ID重量\u df1重量\u df2
1     3         77         97
2     4         70         87
数据

library(tibble)

df1 <- tribble(~ID,  ~Age, ~Weight,
               1,   30,  62,
               2,   40,  80,
               3,   28,  77,
               4,   35,  70)

df2 <- tribble(~ID,  ~Age, ~Weight,
               1,   30,  62,
               2,   40,  80,
               3,   28,  97,
               4,   35,  87,
               5,   25,  65,
               6,   33,  70)
库(TIBLE)
df1熊猫版,与以下部件一起使用:



R:这回答了你的问题吗?啊,我也有同样的想法,只是晚了一分钟:——)@QuangHoang我看得出来;)
(df1[['ID','Weight']].merge(df2[['ID','Weight']],on='ID',suffixes=('_df1','_df2')) 
                             .query('Weight_df1!=Weight_df2'))
   ID  Weight_df1  Weight_df2
2   3          77          97
3   4          70          87