我有两个数据帧,它们共享多个公共列,如下所示:
第一个df1
:
TG_ID ORG_NO TG_CAP DATA_DATE METER_ID CONS_SORT WIRING_MODE T_FACTOR PHASE_FLAG I1 ... I87 I88 I89 I90 I91 I92 I93 I94 I95 I96
0 1646176 134010902 315.0 20200801 8200000036483255 06 3 60.0 1 0.606333 ... 0.480667 0.524333 0.399333 0.430667 0.386667 0.396667 0.371333 0.314333 0.336333 0.289000
1 1646176 134010902 315.0 20200801 8200000036483255 06 3 60.0 2 0.606333 ... 0.480667 0.524333 0.399333 0.430667 0.386667 0.396667 0.371333 0.314333 0.336333 0.289000
2 1646176 134010902 315.0 20200801 8200000036483255 06 3 60.0 3 0.606333 ... 0.480667 0.524333 0.399333 0.430667 0.386667 0.396667 0.371333 0.314333 0.336333 0.289000
6 1646178 134010902 200.0 20200801 8200000033404961 06 3 60.0 1 0.338333 ... 0.199333 0.215000 0.191667 0.248333 0.154000 0.240000 0.129333 0.224667 0.152000 0.198000
7 1646178 134010902 200.0 20200801 8200000033404961 06 3 60.0 2 0.338333 ... 0.199333 0.215000 0.191667 0.248333 0.154000 0.240000 0.129333 0.224667 0.152000 0.198000
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1117 900028797849 134010902 400.0 20200801 8200000035893592 06 3 120.0 2 0.286667 ... 0.192000 0.196667 0.203667 0.171000 0.140333 0.154333 0.126000 0.144000 0.144667 0.131333
1118 900028797849 134010902 400.0 20200801 8200000035893592 06 3 120.0 3 0.286667 ... 0.192000 0.196667 0.203667 0.171000 0.140333 0.154333 0.126000 0.144000 0.144667 0.131333
1119 900029405841 134010902 100.0 20200801 8200000036482415 06 3 30.0 1 0.060000 ... 0.088000 0.127667 0.084333 0.084333 0.123333 0.088000 0.084000 0.084333 0.084333 0.083667
1120 900029405841 134010902 100.0 20200801 8200000036482415 06 3 30.0 2 0.060000 ... 0.088000 0.127667 0.084333 0.084333 0.123333 0.088000 0.084000 0.084333 0.084333 0.083667
1121 900029405841 134010902 100.0 20200801 8200000036482415 06 3 30.0 3 0.060000 ... 0.088000 0.127667 0.084333 0.084333 0.123333 0.088000 0.084000 0.084333 0.084333 0.083667
而第二个df2
:
TG_ID ORG_NO DATA_DATE METER_ID CONS_SORT WIRING_MODE PHASE_FLAG U1 U2 U3 ... U87 U88 U89 U90 U91 U92 U93 U94 U95 U96
27 1646176 134010901 20200801 8200000034727355 04 1 1 248.7 247.4 248.8 ... 251.0 251.4 251.5 246.6 248.1 247.8 248.0 247.8 248.0 246.8
28 1646176 134010902 20200801 8200000032252506 05 1 1 248.5 247.8 248.9 ... 251.0 251.5 249.3 246.8 248.2 247.6 247.2 247.9 249.2 246.9
30 1646176 134010902 20200801 8200000031675334 05 1 1 248.5 248.3 250.4 ... 253.0 251.9 248.4 249.1 248.5 247.6 247.6 246.9 245.9 247.5
32 1646176 134010902 20200801 8200000032855108 05 1 1 240.9 241.1 242.8 ... 248.8 248.8 246.1 245.9 246.7 247.0 245.2 246.9 244.4 243.6
34 1646176 134010902 20200801 8200000032861235 05 1 1 241.8 242.7 243.9 ... 249.8 249.5 246.4 246.2 246.9 247.0 245.7 247.6 244.7 244.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
28323 900028797849 134010902 20200801 8200000032252390 05 1 1 229.6 231.3 231.2 ... 236.0 234.4 232.5 232.7 231.8 233.3 233.1 232.4 229.5 229.3
28324 900028797849 134010902 20200801 8200000035146454 05 1 1 233.2 232.5 233.1 ... 236.8 237.3 237.5 233.8 234.2 233.4 233.6 232.3 233.3 233.7
28325 900028797849 134010902 20200801 8200000035113338 05 1 1 233.1 232.6 233.0 ... 237.0 237.2 234.7 233.7 234.3 233.4 233.6 232.2 232.7 233.8
28326 900028797849 134010902 20200801 8200000035132418 05 1 1 233.7 233.4 233.8 ... 237.3 237.7 234.9 234.3 234.4 233.9 233.6 232.0 233.2 233.9
28327 900028797849 134010902 20200801 8200000035138508 05 1 1 231.9 233.3 233.4 ... 237.7 236.1 234.3 234.1 233.5 233.8 233.6 233.8 231.3 231.1
我想保留df2
中的行,其列中的值“TG\u ID”、“ORG\u NO”和“DATA\u DATE”
也存在于df1
中。例如,df2的第27行有值“1646176”、“134010901”和“20200801”
,对于“TG\u ID”、“ORG\u NO”和“DATA\u DATE”
,这些值并不都存在于df1
(因为df1只对“ORG\u NO”
列有值),所以应该过滤掉df2的第27行。另一方面,应保留
df2
的第28行,因为值“1646176”、“134010902”和“20200801”
也出现在df1
中。
我尝试过如下合并:
df3 = df2.merge(df1, on = ["TG_ID", "ORG_NO", "DATA_DATE"])
但是它提供了比
df2
更多的行和列,这是不期望的。
下面对join()的调用只是给出了一个错误
len(left_on)必须等于“right”索引中的级别数
df3 = df2.join(df1, on = ["TG_ID", "ORG_NO", "DATA_DATE"])
我怎样才能恰当地达到我的要求?
您可以将列TG\u ID
、ORG\u NO
和DATA\u DATE
设置为数据帧df1
和df2
中的多索引,然后使用多索引。isin
测试数据帧df1
索引中df2
索引的成员资格,以创建布尔掩码
:
c = ["TG_ID", "ORG_NO", "DATA_DATE"]
mask = df2.set_index(c).index.isin(df1.set_index(c).index)
>>> df2[mask]
TG_ID ORG_NO DATA_DATE METER_ID CONS_SORT WIRING_MODE PHASE_FLAG U1 U2 U3 ... U87 U88 U89 U90 U91 U92 U93 U94 U95 U96
28 1646176 134010902 20200801 8200000032252506 05 1 1 248.5 247.8 248.9 ... 251.0 251.5 249.3 246.8 248.2 247.6 247.2 247.9 249.2 246.9
30 1646176 134010902 20200801 8200000031675334 05 1 1 248.5 248.3 250.4 ... 253.0 251.9 248.4 249.1 248.5 247.6 247.6 246.9 245.9 247.5
32 1646176 134010902 20200801 8200000032855108 05 1 1 240.9 241.1 242.8 ... 248.8 248.8 246.1 245.9 246.7 247.0 245.2 246.9 244.4 243.6
34 1646176 134010902 20200801 8200000032861235 05 1 1 241.8 242.7 243.9 ... 249.8 249.5 246.4 246.2 246.9 247.0 245.7 247.6 244.7 244.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
28323 900028797849 134010902 20200801 8200000032252390 05 1 1 229.6 231.3 231.2 ... 236.0 234.4 232.5 232.7 231.8 233.3 233.1 232.4 229.5 229.3
28324 900028797849 134010902 20200801 8200000035146454 05 1 1 233.2 232.5 233.1 ... 236.8 237.3 237.5 233.8 234.2 233.4 233.6 232.3 233.3 233.7
28325 900028797849 134010902 20200801 8200000035113338 05 1 1 233.1 232.6 233.0 ... 237.0 237.2 234.7 233.7 234.3 233.4 233.6 232.2 232.7 233.8
28326 900028797849 134010902 20200801 8200000035132418 05 1 1 233.7 233.4 233.8 ... 237.3 237.7 234.9 234.3 234.4 233.9 233.6 232.0 233.2 233.9
28327 900028797849 134010902 20200801 8200000035138508 05 1 1 231.9 233.3 233.4 ... 237.7 236.1 234.3 234.1 233.5 233.8 233.6 233.8 231.3 231.1
我有两个数据帧,它们的列名相同,但行数不同。第一个数据帧(a)看起来与此类似: 注:站点5、6、8和12故意丢失。 第二个数据帧(b)看起来像这样: 我想要实现的是: 在那里我注入(我肯定有一个更好的术语)数据帧b到数据帧a的数据,但是我想用零替换b中的任何NAs,并保持a中的NAs不变。 我发现并尝试了这个代码: 但它会带来NAs。我考虑先将NAs替换为零,但即使如此,它也会抹去我目前在数据帧a
我有两个Dataframes一个与日期集(df1)和另一个与emp_ids集(df2)。我试图创建一个新的Dataframe,这样df2中的每个emp_id都被标记为df1中的每个日期。 下面给出了我的数据帧的外观 df1 df2 预期产出: 我将日期列转换为字符串,并尝试执行以下操作,但返回的数据框为空 我尝试做
我有两个数据框,都包含英文和中文单词字符串,我想知道其中一个是另一个的子集:
我有两个数据帧df1和df2。df1就像一个具有以下值的字典 df2具有以下值: 我想基于df1数据帧中的,将df2拆分为3个新的数据帧。 日期,TLRA_权益栏应位于数据框 预期产出: > 数据帧 消费者,非周期性数据帧 请让我知道如何有效地做。我想做的是连接列名,例如,然后根据列名的前半部分分割数据帧。 代码: 但这很复杂。需要更好的解决方案。
我有两个数据帧df1和df2 df1如下 df2就像 我想根据df2中与df1中的列名匹配的单元格值将值从df1复制到df2,所以我的df3应该看起来像 df3 基本上,我想根据df2的单元格值(df1中的列名)从df1复制df2中的列 如果它仍然令人困惑,请告诉我
这是我的密码: 我想知道如何将df3绑定到单个数据帧中作为"NA"s? 我在r_blogger上找到了一篇关于将向量或长度不等的数据帧组合成一个数据帧的文章。http://www.r-bloggers.com/r-combining-vectors-or-data-frames-of-unequal-length-into-one-data-frame/ 但是我从数据中得到的数据框,其中一些是空的