使用 Pandas "isin" 语法的子集选择
Subset-selection using Pandas "isin"-syntax
我有一个关于 table(Table A - 包含三个键的多个值和一些 "value" 列)的问题,如下所示:
ID TIME1 TIME2 VALUE_A VALUE_B
1 201501 201501 a 1a
1 201502 201502 a 1c
1 201502 201502 b 1d
1 201501 201501 b 2e
1 201501 201501 b 6a
1 201501 201501 b 1d
1 201502 201502 b 2e
1 201502 201502 b 6a
我使用代码从另一个 table 创建唯一值,获取我想从 table A 中提取的行的引用,给定键。这个 table (table B) 的外观如下:
ID TIME1 TIME2
1 201502 201502
2 201511 201511
我已经设法通过一个简单的合并来取出我想要的值,它给出了我想要的值 table A,给定参考。但是,我想使用 "isin"-function 来实现这一点。我有下面的语法,它给了我重复的值。我唯一想要的是从 Table A 中取出行,参考来自 Table B。我怎样才能让它做到这一点?
Table C 如下:
ID TIME1 TIME2 VALUE_A VALUE_B
1 201502 201502 a 1c
1 201502 201502 b 1d
1 201502 201502 b 2e
1 201502 201502 b 6a
语法("isin"-版本):
subset = df[df.ID.isin(df2['ID']) & (df.TIME1.isin(df2['TIME1']) & df.TIME2.isin(df2['TIME2']))]
创建 table A 和 table B 的代码如下:
df = DataFrame({'ID' : [1,1,1,1,1,1,1,1],
'TIME1' : [201501,201502,201502,201501,201501,201501,201502,201502],
'TIME2' : [201501,201502,201502,201501,201501,201501,201502,201502],
'VALUE_A' : ['a', 'a', 'b', 'b', 'b', 'b', 'b', 'b'],
'VALUE_B' : ['1a', '1c', '1d', '2e', '6a', '1d', '2e', '6a']})
df2 = DataFrame({'ID' : [1,2],
'TIME1' : [201502,201501],
'TIME2' : [201502,201501]
})
非常感谢!
只需使用 isin()
通过
即可实现此目的
In [102]:
df[df.TIME1.isin(df2.TIME1) & df.TIME2.isin(df2.TIME2)]
Out[102]:
ID TIME1 TIME2 VALUE_A VALUE_B
1 201502 201502 a 1c
1 201502 201502 b 1d
2 201511 201511 b 2e
2 201511 201511 b 6a
我相信您想将布尔条件修改为:
In [146]:
subset = df[df.ID.isin(df2['ID']) & (df.TIME1.isin(df2['TIME1']) | df.TIME2.isin(df2['TIME2'])) ]
subset
Out[146]:
ID TIME1 TIME2 VALUE_A VALUE_B
1 1 201502 201-02 a 1c
2 1 201502 201502 b 1d
6 2 201511 201511 b 2e
7 2 201511 201511 b 6a
所以这会检查 ID 是否存在以及 Time1 或 Time2 在另一个 df 中。
我有一个关于 table(Table A - 包含三个键的多个值和一些 "value" 列)的问题,如下所示:
ID TIME1 TIME2 VALUE_A VALUE_B 1 201501 201501 a 1a 1 201502 201502 a 1c 1 201502 201502 b 1d 1 201501 201501 b 2e 1 201501 201501 b 6a 1 201501 201501 b 1d 1 201502 201502 b 2e 1 201502 201502 b 6a
我使用代码从另一个 table 创建唯一值,获取我想从 table A 中提取的行的引用,给定键。这个 table (table B) 的外观如下:
ID TIME1 TIME2 1 201502 201502 2 201511 201511
我已经设法通过一个简单的合并来取出我想要的值,它给出了我想要的值 table A,给定参考。但是,我想使用 "isin"-function 来实现这一点。我有下面的语法,它给了我重复的值。我唯一想要的是从 Table A 中取出行,参考来自 Table B。我怎样才能让它做到这一点?
Table C 如下:
ID TIME1 TIME2 VALUE_A VALUE_B 1 201502 201502 a 1c 1 201502 201502 b 1d 1 201502 201502 b 2e 1 201502 201502 b 6a
语法("isin"-版本):
subset = df[df.ID.isin(df2['ID']) & (df.TIME1.isin(df2['TIME1']) & df.TIME2.isin(df2['TIME2']))]
创建 table A 和 table B 的代码如下:
df = DataFrame({'ID' : [1,1,1,1,1,1,1,1], 'TIME1' : [201501,201502,201502,201501,201501,201501,201502,201502], 'TIME2' : [201501,201502,201502,201501,201501,201501,201502,201502], 'VALUE_A' : ['a', 'a', 'b', 'b', 'b', 'b', 'b', 'b'], 'VALUE_B' : ['1a', '1c', '1d', '2e', '6a', '1d', '2e', '6a']}) df2 = DataFrame({'ID' : [1,2], 'TIME1' : [201502,201501], 'TIME2' : [201502,201501] })
非常感谢!
只需使用 isin()
通过
In [102]:
df[df.TIME1.isin(df2.TIME1) & df.TIME2.isin(df2.TIME2)]
Out[102]:
ID TIME1 TIME2 VALUE_A VALUE_B
1 201502 201502 a 1c
1 201502 201502 b 1d
2 201511 201511 b 2e
2 201511 201511 b 6a
我相信您想将布尔条件修改为:
In [146]:
subset = df[df.ID.isin(df2['ID']) & (df.TIME1.isin(df2['TIME1']) | df.TIME2.isin(df2['TIME2'])) ]
subset
Out[146]:
ID TIME1 TIME2 VALUE_A VALUE_B
1 1 201502 201-02 a 1c
2 1 201502 201502 b 1d
6 2 201511 201511 b 2e
7 2 201511 201511 b 6a
所以这会检查 ID 是否存在以及 Time1 或 Time2 在另一个 df 中。