python - Pandas dataframe - 根据两列的 ID 查找匹配的行

标签 python join merge pandas dataframe

我有一个数据框,假设它是这样定义的:

df = pd.DataFrame({
'variable' : ["A","A","B","B","A","B","B","A"],
'id1' : [1,2,3,4,5,6,7,8],
'id2' : ['NaN','NaN',2,'NaN',4,3,'NaN',5]
})

所以结果是:

   id1  id2 variable1
0    1  NaN         A
1    2  NaN         A
2    3    2         B
3    4  NaN         B
4    5    4         A
5    6    3         B
6    7  NaN         B
7    8    5         A

现在我想实现的是:

  1. 匹配一行中的 id2 等于另一行中的 id1 的行。所以在这个特定的例子中,成对的行应该是:

    (2, 1) - 因为 df.iloc[2]['id2'] == df.iloc[1]['id1']

    随后:(4, 3), (5, 2), (7, 4)

  2. 从这些对中,只选择那些 variable1 在一对中是常量的,所以从上面的对中我们将只剩下 (5, 2) 和 (7, 4),因为只有在这些情况下,我们才有:

    df.iloc[5]['variable1'] == df.iloc[2]['variable1']

    (示例适用于第一对类(class))。

现在,如果这是纯 Python,我可能会迭代两个列表,包含 id1id2,检查 ids 和 variable,但我想应该有一个更面向数组的方法...

也许创建一个重复的数据帧并做一个 id1id2 的交集就可以了?还是我应该考虑一个完全不同的想法?

最佳答案

也许:

>>> pd.merge(df[['id2', 'variable']].reset_index(),
...          df.reset_index(), how='inner',
...          left_on=['id2', 'variable'],
...          right_on=['id1', 'variable'])[['index_x', 'index_y']]

   index_x  index_y
0        5        2
1        7        4

[2 rows x 2 columns]

关于python - Pandas dataframe - 根据两列的 ID 查找匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22533784/

相关文章:

python - AWS Lambda 以字符串形式返回 JSON 数据

python - (Python) 具有优先数组的两个数组之间的映射

Mysql 查询更新有条件

MYSQL 查询左连接

arrays - 为什么归并排序算法需要将数组一分为二后再进行排序?

python - 使用 tensorflow image_dataset_from_directory 时从数据集中获取标签

Python数组算法

java - 如果sql连接2个表,如何操作数据传输对象?

pandas - 使用 to_datetime 将数据框对象转换为日期

algorithm - 如何计算a列中每对值之间b列中共享值的数量?