Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 将2个数据帧合并为1,并对多个列进行排列_Python 2.7_Pandas_Merge - Fatal编程技术网

Python 2.7 将2个数据帧合并为1,并对多个列进行排列

Python 2.7 将2个数据帧合并为1,并对多个列进行排列,python-2.7,pandas,merge,Python 2.7,Pandas,Merge,我有两个熊猫数据框,代表一个物品清单。两个数据帧都有四列: df1 id, item, colour, year 1, car, red, 2015 2, truck,, 2016 3, house, blue, 4, car, blue, 5, truck, red, 2015 df2 id, item, colour, year 1, house, blue, 2015 2, truck,, 2015 3, car, blue, 4, house,, 5, car, red, 2015

我有两个熊猫数据框,代表一个物品清单。两个数据帧都有四列:

df1
id, item, colour, year
1, car, red, 2015
2, truck,, 2016
3, house, blue,
4, car, blue,
5, truck, red, 2015

df2
id, item, colour, year
1, house, blue, 2015
2, truck,, 2015
3, car, blue,
4, house,,
5, car, red, 2015
我知道这些清单可能代表同一个对象,因此我想将两者联系起来

比如说,

  • df1[1]=df2[5](3个识别变量)
  • df1[4]=df2[3](2个识别变量)
  • df1[3](蓝色房屋)可能与df2[1](蓝色房屋,2015)相同
我有两个主要问题:如何有效地完成这项工作,以及如何为链接提供可靠性

我曾想过创建一个公共字段,它是所有列[项目、颜色、年份]的组合,并在此基础上合并。我会得到上面的前两场比赛;但它们没有同样的可靠性。我想知道是否有一种简单的方法来“评分”这种可靠性(目前我正在考虑进行两次合并,具体取决于可变可用性)。 我将创建另一个公共字段,只有2个变量(项目、颜色),并在此字段上合并。这将给我链接:(蓝色房子)和(蓝色房子,2015)。这显然是一个较弱的环节

你知道如何在不按顺序合并的情况下做到这一点吗?我目前的计划是合并3个属性(当它们存在时),然后在剩下的属性上合并2个属性(有3个排列),并且至少有2个属性,然后只合并1个属性。我会根据我用来合并的属性的数量给链接一个可靠性分数

df = pd.DataFrame(
    (df1.values[:, None] == df2.values).sum(2),
    df1.index, df2.index)

matches = df.mask(df.lt(2)).stack()

def f(df):
    i, j = df.name
    return pd.concat([df1.loc[i], df2.loc[i]], axis=1, keys=['df1', 'df2']).T

matches.groupby(level=[0, 1]).apply(f).stack().unstack([-2, -1])


哇,看起来很酷!我不确定我是否了解所有内容(我首先感到困惑,因为您将df1放在df2的旁边,但事实上,结果是ID,对吗?)是否可以将年份作为精确匹配?(基本上2和2不一样)哇,看起来很酷!我不确定我是否了解所有内容(我首先感到困惑,因为您将df1放在df2的旁边,但事实上,结果是ID,对吗?)是否可以将年份作为精确匹配?(基本上2不能与2相同)