Python 如何根据熊猫中的某些条件将df1中的一行与df2中的其他行进行比较?
我有两个文件(有些行可能相同,有些行可能不同),其中包含如下数据-Python 如何根据熊猫中的某些条件将df1中的一行与df2中的其他行进行比较?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个文件(有些行可能相同,有些行可能不同),其中包含如下数据- PID, STARTED,%CPU,%MEM,COMMAND 1,Wed Sep 12 10:10:21 2018, 0.0, 0.0,init 2,Wed Sep 12 10:10:21 2018, 0.0, 0.0,kthreadd 现在,我想对这些数据帧执行以下操作- 从df1中选择一行(比如R1) 迭代df2中的所有行,并检查是否与R1匹配 如果找到匹配项,则将其存储在单独的数据帧中,如果不匹配,则忽
PID, STARTED,%CPU,%MEM,COMMAND
1,Wed Sep 12 10:10:21 2018, 0.0, 0.0,init
2,Wed Sep 12 10:10:21 2018, 0.0, 0.0,kthreadd
现在,我想对这些数据帧执行以下操作-
任何帮助都是可观的。原始数据 第一个数据帧:
df = pd.DataFrame({
'Started': [*np.repeat(pd.Timestamp(2018, 9, 12, 12, 12, 21), 2)],
'%CPI': [0.0, 0.0],
'%MEM': [0.0, 0.0],
'COMMAND': ['init', 'kthreadd']
})
输出:
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
1 2018-09-12 12:12:21 0.0 0.0 kthreadd
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
第二数据帧:
df2 = pd.DataFrame({
'Started': [pd.Timestamp(2018, 9, 12, 12, 12, 21), pd.Timestamp(2020, 9, 12, 12, 12, 21)],
'%CPI': [0.0, 1.0],
'%MEM': [0.0, 1.0],
'COMMAND': ['init', 'different']
})
输出(第0行相同,第1行不同):
回答 创建仅包含匹配行的新数据帧:
columns = df.columns.tolist()
matches = pd.merge(df, df2, left_on=columns, right_on=columns)
输出:
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
1 2018-09-12 12:12:21 0.0 0.0 kthreadd
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
原始数据 第一个数据帧:
df = pd.DataFrame({
'Started': [*np.repeat(pd.Timestamp(2018, 9, 12, 12, 12, 21), 2)],
'%CPI': [0.0, 0.0],
'%MEM': [0.0, 0.0],
'COMMAND': ['init', 'kthreadd']
})
输出:
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
1 2018-09-12 12:12:21 0.0 0.0 kthreadd
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
第二数据帧:
df2 = pd.DataFrame({
'Started': [pd.Timestamp(2018, 9, 12, 12, 12, 21), pd.Timestamp(2020, 9, 12, 12, 12, 21)],
'%CPI': [0.0, 1.0],
'%MEM': [0.0, 1.0],
'COMMAND': ['init', 'different']
})
输出(第0行相同,第1行不同):
回答 创建仅包含匹配行的新数据帧:
columns = df.columns.tolist()
matches = pd.merge(df, df2, left_on=columns, right_on=columns)
输出:
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
1 2018-09-12 12:12:21 0.0 0.0 kthreadd
Started %CPI %MEM COMMAND
0 2018-09-12 12:12:21 0.0 0.0 init
可能重复的数据帧能否确认两个数据帧具有相同的列?@muzzyq感谢您的输入。是的,它在两个数据帧中有相同的列。可能的重复。您能确认两个数据帧具有相同的列吗?@muzzyq谢谢您的输入。是的,它在dataframe.muzzyq和dataframe.muzzyq中都有相同的列,它是否像步骤1和步骤2所解释的那样在内部工作?不,因为它不是一个迭代。然而,这种技术(内部联接)将更快地为您提供想要的结果:df1中与df2.muzzyq中的一行匹配的每一行,是否如步骤1和步骤2所述在内部工作?不,因为它不是迭代。然而,这种技术(内部联接)将更快地得到想要的结果:df1中的每一行都与df2中的一行匹配。