比较数据框字典中的列

时间:2019-09-07 09:00:52

标签: 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 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]

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

2 个答案:

答案 0 :(得分:2)

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

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'的额外列(也许您最好使用其他名称),该列检查特定行的值是否与{{ 1}}。

如果series_last包含字符串以外的内容,我们可以先将它们转换为字符串:

dfs

答案 1 :(得分:1)

创建列表:

l=[Di_1[i] for i in dfs]

然后使用isin()可以比较第一个和最后一个df

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

   A
0  1
1  0
2  0
3  1