基于2列值的条件切片

2024-04-29 16:11:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df1,看起来像:

Out[43]:
city1   city2
0   YYZ     SFO
1   YYZ     EWR
2   YYZ     DFW
3   YYZ     LAX
4   YYZ     YYC

我有另一个df2,我想基于df1切片,即df2中的city1和city2必须对应于df1中相同的city1和city2对。在

我只想要df2中city1和city2列完全匹配的行。在

我是否必须将dfs合并/连接在一起作为df1上的左连接作为唯一干净的方法?我不想用city1和city2的串联值创建另一列。这是可行的,但必须有一种简单的方法,即在熊猫体内植入,而不必操纵我的数据。在

更新:

df2不止2列。它总共有20列。为了简单起见,我只提到了city1和city2。在

在任何情况下,我都希望返回df2中city1和city2对匹配df1中的所有行。在


Tags: 方法切片outdf1df2dfs植入lax
2条回答

设置

df2 = pd.DataFrame([
        ['YYZ', 'SFO', 1],
        ['YYZ', 'YYD', 1]
    ], columns=['city1', 'city2', 'val'])

cols = ['city1', 'city2']

选项1
numpybroadcasting

^{pr2}$

选项2
pandasmerge

df2.merge(df1, on=cols)

  city1 city2  val
0   YYZ   SFO    1

选项3
不知道叫什么,不推荐。在

idx = pd.MultiIndex.from_arrays(df1.values.T, names=df1.columns)
df2[df2[cols].apply(tuple, 1).isin(idx)]

  city1 city2  val
0   YYZ   SFO    1

你不必加入。这里有一种方法。在

import pandas as pd

z = {'city1' : pd.Series(['YYZ', 'YYZ','YYZ','YYZ']), 'city2' : pd.Series(['SFO', 'EWR', 'DFW', 'LAX'])}
df = pd.DataFrame(z)
x = {'city1' : pd.Series(['YYZ', 'YYX','YYZ','YYX']), 'city2' : pd.Series(['SFO', 'EWR', 'DFW', 'LAX'])}
df1 = pd.DataFrame(x)

df.head()

  city1 city2
0   YYZ   SFO
1   YYZ   EWR
2   YYZ   DFW
3   YYZ   LAX

df1.head()

  city1 city2
0   YYZ   SFO
1   YYX   EWR
2   YYZ   DFW
3   YYX   LAX

condition = df['city1'] == df1['city1']

df[(condition)]

  city1 city2
0   YYZ   SFO
2   YYZ   DFW

相关问题 更多 >