python - 比较 2 个数据框并创建一个新的

标签 python pandas dataframe

我有 2 个数据框 df1df2,每个数据框一列。我想逐行比较它们,如果列中的值匹配,则创建一个包含所有匹配值的新数据框。如果没有,请为不匹配的值创建一个包含 2 列的数据框。

equal_index = []
equal_df1 = []
not_equal_index = []
not_equal_df1 = []
not_equal_df2 = []

for x in df1.index.tolist():
    if df1['column'].ix[x] == df2['column'].ix[x]:
        equal_index.append(x)
        equal_df1.append(df1['column'].ix[x])
    else:
        not_equal_index.append(x)
        not_equal_df1.append(df1['column'].ix[x])
        not_equal_df2.append(df2['column'].ix[x])

DF_equal = pd.DataFrame({"column":equal_df1}, index = equal_index )
DF_not_equal = pd.DataFrame({'column1':not_equal_df1,'column2':not_equal_df2}, index = not_equal_index)

看起来应该可以工作,但我收到错误:ValueError:系列的真值不明确。

如果我尝试一些基本的东西

for x in df1.index.tolist():
    print df1['column'].ix[x] == df2['column'].ix[x]

对于尽可能多的 x,我得到 TrueFalse

如果我使用 is 而不是 ==,我会得到 DF_not_equal 中的所有值。

最佳答案

import pandas as pd

df = pd.DataFrame({0:['test','test2','test3'], 1:['foo','foo2','foo3'], 2:['bar','bar2', 'bar3']})

df2 = pd.DataFrame({0:['test','test2','test4'], 1:['foo','foo2','foo3'], 2:['bar','bar2', 'bar3']})

df_equal = pd.DataFrame()

df_not_equal = pd.DataFrame()

for i in range(df.shape[0]):
    if all(df.loc[i].values==df2.loc[i].values):
        df_equal = df_equal.append(df.loc[i], ignore_index=True)
    else:
        df_not_equal['A'] = df.loc[i]
        df_not_equal['B'] = df2.loc[i]

print(df_equal)

print(df_not_equal)

会给你:

       0     1     2
0   test   foo   bar
1  test2  foo2  bar2
       A      B
0  test3  test4
1   foo3   foo3
2   bar3   bar3

查看您提供的错误,问题出在if df1['column'].ix[x] == df2['column'].ix[x]:pandas 不允许这种类型的比较,这就是为什么他们说“不明确”。

通过使用该行的实际值可以解决该问题,您需要检查allany(我希望这些是不言自明的)。

关于python - 比较 2 个数据框并创建一个新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33153456/

相关文章:

python - Pandas 分组7天

python - 过滤 pandas 数据帧列表以仅包含以 a 结尾的行索引

python - 将列表中的字符串插入数据框公式以在 Pandas 中循环计算

python - 从 Pandas 数据帧生成相似度矩阵

python - 将第一个单元格与行和计数匹配的其他值进行比较

python - Python 子进程在什么情况下获得 SIGPIPE?

python - pyramid_mailer 主题标题问题

python - 在 Python 中使用 mdbtools 从 .mdb 文件中提取和排序数据

python - 使用 for 循环从列表创建数据框

python - 在pandas中使用groupby时如何分别求和负值和正值?