Python 比较数据帧字典中的列

Python 比较数据帧字典中的列,python,pandas,dictionary,Python,Pandas,Dictionary,我有一个数据帧字典(Di_1)。每个数据帧具有相同的列数、列名、行数和行索引。我还有一个数据帧(dfs)的名称列表。我想将每个数据帧中的一列(A)的内容与列表中最后一个数据帧的内容进行比较,看看它们是否相同。例如: df_A = pd.DataFrame({'A': [1,0,1,0]}) df_B = pd.DataFrame({'A': [1,1,0,0]}) Di_1 = {'X': df_A, 'Y': df_B} dfs = ['X','Y'] 我试过: for df in d

我有一个数据帧字典(Di_1)。每个数据帧具有相同的列数、列名、行数和行索引。我还有一个数据帧(dfs)的名称列表。我想将每个数据帧中的一列(A)的内容与列表中最后一个数据帧的内容进行比较,看看它们是否相同。例如:

df_A = pd.DataFrame({'A': [1,0,1,0]})
df_B = pd.DataFrame({'A': [1,1,0,0]})

Di_1 = {'X': df_A, 'Y': df_B}

dfs  = ['X','Y']
我试过:

for df in dfs:
    Di_1[str(df)]['True'] = Di_1[str(df)]['A'] .equals(Di_1[str(dfs[-1])]['A'])
我得到:

[0,0,0,0]
我想得到:

[1,0,0,1]

我的尝试是检查整个列是否相同,但我希望让它逐行检查每个数据帧。

我认为您在这里把事情弄得太复杂了。你可以

series_last = Di_1[dfs[-1]]['A']

for df in map(Di_1.get, dfs):
    df['True'] = df['A'] == series_last
这将产生以下结果:

>>> df_A
   A   True
0  1   True
1  0  False
2  1  False
3  0   True
>>> df_B
   A  True
0  1  True
1  1  True
2  0  True
3  0  True
因此,每个
df_i
都有一个名为
'True'
的额外列(也许您最好使用不同的名称),用于检查特定行的值是否与
系列中最后一行的值相同

如果
dfs
包含字符串以外的内容,我们可以首先将这些内容转换为字符串:

series_last = Di_1[str(dfs[-1])]['A']

for df in map(Di_1.get, map(str, dfs)):
    df['True'] = df['A'] == series_last
series_last=Di_1[str(dfs[-1])]['A']
对于映射中的df(Di_1.get,map(str,dfs)):
df['True']=df['A']==series_last
创建一个列表:

l=[Di_1[i] for i in dfs]
然后使用
isin()
可以比较第一个df和最后一个df

l[0].isin(l[-1]).astype(int)


这正是我所需要的,因为当有2个以上的数据帧时,它也可以工作,谢谢。在我的真实代码中,我必须放上“series_last=Di_1[str(dfs[-1])]['A']”,因为我的数据帧是有编号的。我在哪里可以把“str”放在for循环中呢?@R.Cox:首先为什么需要
str(…)
dfs
列表包含字符串,因此
str(..)
在这里是不可操作的;我的示例搞错了。它的数据类型是:int64
   A
0  1
1  0
2  0
3  1