Python 如何添加另一个数据帧的索引
我有两个不同的数据帧。首先,我必须检查df1中的数据是否与df2匹配。如果是这种情况,则添加一列“isRep”=true,否则等于false。它为我创建了一个df3 现在,我需要在我的df3中添加一个“idRep”列,该列对应于索引generate with pandas,在这里可以找到df2中的数据 这是df1:Python 如何添加另一个数据帧的索引,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有两个不同的数据帧。首先,我必须检查df1中的数据是否与df2匹配。如果是这种情况,则添加一列“isRep”=true,否则等于false。它为我创建了一个df3 现在,我需要在我的df3中添加一个“idRep”列,该列对应于索引generate with pandas,在这里可以找到df2中的数据 这是df1: Index Firstname Name Origine 0 Johnny Depp USA 1
Index Firstname Name Origine
0 Johnny Depp USA
1 Brad Pitt USA
2 Angelina Pitt USA
这是d2:
Index Firstname Name Origine
0 Kidman Nicole AUS
1 Jean Dujardin FR
2 Brad Pitt USA
与此代码合并后:
df = pd.merge(data, dataRep, on=['Firstname', 'Name', 'Origine'], how='left', indicator='IsRep')
df['IsRep'] = np.where(df.IsRep == 'both', True, False)
在这段代码之后,我得到了这个结果,它是我的df3(它与df1相同,但列为“isRep”):
现在,我需要一个名为“idRep”的列的另一个数据帧,我将索引放在与df2类似的列中。但我不知道我该怎么做:
Index Firstname Name Origine isRep IdRep
0 Johnny Depp USA False -
1 Brad Pitt USA True 2
2 Angelina Pitt USA False -
使用dict反向查找
我们利用赋值
依赖顺序的参数的变化
cols = ['Firstname', 'Name', 'Origine']
d = dict(zip(zip(*map(df2.get, cols)), df2.index))
z = [*zip(*map(df1.get, cols))]
df1.assign(
IdRep=[*map(d.get, z)],
isRep=lambda d: d.IdRep.notna()
)
有点麻烦的是在合并之前重置索引。仅重置右侧数据帧上的索引
问题/期望的输出是什么?我需要一个新的数据框,列为“IdRep”,就像我解释的最后一个例子一样,这很简单。我喜欢,不客气。请将此答案视为探索性练习。您正确选择了@user3483203的答案(-:
cols = ['Firstname', 'Name', 'Origine']
d = dict(zip(zip(*map(df2.get, cols)), df2.index))
z = [*zip(*map(df1.get, cols))]
df1.assign(
isRep=[*map(d.__contains__, z)],
IdRep=[*map(d.get, z)]
)
Firstname Name Origine isRep IdRep
Index
0 Johnny Depp USA False NaN
1 Brad Pitt USA True 2.0
2 Angelina Pitt USA False NaN
cols = ['Firstname', 'Name', 'Origine']
d = dict(zip(zip(*map(df2.get, cols)), df2.index))
z = [*zip(*map(df1.get, cols))]
df1.assign(
IdRep=[*map(d.get, z)],
isRep=lambda d: d.IdRep.notna()
)
m = dataRep.rename_axis('IdRep').reset_index()
df = pd.merge(data, m, on=['Firstname', 'Name', 'Origine'], how='left', indicator='IsRep')
df['IsRep'] = np.where(df.IsRep == 'both', True, False)
Firstname Name Origine IdRep IsRep
0 Johnny Depp USA NaN False
1 Brad Pitt USA 2.0 True
2 Angelina Pitt USA NaN False