我有两个不同大小的数据帧,我想对四个不同列中的所有值进行比较(两组)
基本上,我希望看到df1['A']==df2['A']
import pandas as pd
df1 = pd.DataFrame({"A": [1, 2, 3, 4, 3], "B": [2, 5, 4, 7, 5], "C": [1, 2, 8, 0, 0]})
df2 = pd.DataFrame({"A": [1, 3, 2, 4, 8], "B": [5, 5, 4, 9, 1], "C": [1, 3, 3, 4, 6]})
df1:
A B C
0 1 2 1
1 2 5 2
2 3 4 8
3 4 7 0
4 3 5 0
...
df2:
A B C
0 1 5 1
1 3 4 3
2 2 5 4
3 4 9 4
5 8 1 6
...
in: df1['A'] == df2['A'] & where df1['B'] == df2['B']
df1['D'] = df1['C'] + df2['C']
out: df1:
A B C D
0 1 2 1 nan
1 2 5 2 6
2 3 4 8 11
3 4 7 0 nan
4 3 5 0 nan
我的实际数据帧要大得多(120000行数据,A列的值从1到700,B列的值从1到300),所以我知道这可能是一个更长的过程。
您可以首先合并两个数据帧
In [145]: dff = pd.merge(df1, df2, on=['A', 'B'], how='left')
In [146]: dff
Out[146]:
A B C_x C_y
0 1 2 1 NaN
1 2 5 2 4
2 3 4 8 3
3 4 7 0 NaN
然后,对不存在空值的C_-{like}
列进行行求和,然后用零填充NaN。
In [147]: dff['C'] = dff.filter(regex='C_').sum(skipna=False, axis=1).fillna(0)
In [148]: dff
Out[148]:
A B C_x C_y C
0 1 2 1 NaN 0
1 2 5 2 4 6
2 3 4 8 3 11
3 4 7 0 NaN 0
并且,您可以删除/选择所需的列。
您可以合并列A和列B上的两个DataFrames。由于您希望保留来自df1
的所有值,请对df1
和df2
进行左合并。在A和B不匹配的地方,来自df2
的合并列C将为空。合并后,只是重命名合并后的列,做个和。
# Do a left merge, keeping df1 column names unchanged.
df1 = pd.merge(df1, df2, how='left', on=['A', 'B'], suffixes=('', '_2'))
# Add the two columns, fill locations that don't match with zero, and rename.
df1['C_2'] = df1['C_2'].add(df1['C']).fillna(0)
df1.rename(columns={'C_2': 'D'}, inplace=True)
我有两个数据帧DF1和DF2。 DF1: DF2: 我需要来自DF2的行数,其中EmploymentType='Employee',EmpStatus='Active',EmpStartDate 输出: 如何在不合并两个数据帧的情况下实现这一点? 我不能合并数据帧,因为没有公共键,而且因为我需要基于条件的行数,我不能在任何临时列上加入数据帧,因为我需要避免交叉连接。
我有两个数据帧,希望比较它们并返回第一个数据帧(df1)中不在第二个数据帧(df2)中的行。我找到了一种比较它们并返回差异的方法,但无法找出如何只返回df1中缺失的部分。
我目前正在尝试比较两个数据帧(例如df1和df2)的列名,并从其中一个(df2)中提取值(如果匹配的话),以创建一个新的(第三个)数据帧。
我在python中有两个不同长度的数据帧,如下所示: 我现在要做的是比较df1的Column1和df2的ColumnA。对于每个“命中”,其中df2中ColumnA中的一行与df1中Column1中的一行具有相同的值,我想在df1中附加一列,其中df2的vaule ColumnB对于找到“命中”的行具有相同的值,因此我的结果如下所示: 到目前为止,我尝试的是: 这给了我一个错误,说我不能比较两个不
这里有两个数据帧: 预期数据帧: 以及实际数据帧: 现在两个数据帧之间的区别是: 我们使用的是except函数df1.except(df2),但问题是,它返回的是不同的整行。我们希望看到该行中哪些列不同(在本例中,“romin”和“romino”与“emp_name”不同)。我们在这方面遇到了巨大的困难,任何帮助都会很好。
情况: 两个数据帧(df1和df2)具有相同的三个索引,例如“A”、“B”、“C”。df1和df2的列数不同。df1和df2中的所有单元格都填充了float类型的数据。 DF1: DF2: 目标: 从df2中选择的列(例如“BBB”)与df1的每列相加后,结果应存储在新的数据帧(df_new)中。df_new的格式应为df1(列数和行数),并具有与df1相同的列名和索引。 new_df: 我的做法