我有一个数据帧字典(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]
我的尝试是检查整个列是否相同,但我想让它逐行遍历每个数据帧。
答案 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