python pandas-根据串联数据帧的索引和/或ID设置列的列值

时间:2019-05-28 22:09:15

标签: pandas dataframe concatenation

我有一个至少两个串联数据帧的串联数据帧:

i.e. 
df1
  Name | Type | ID
0 Joe     A     1
1 Fred    B     2
2 Mike   Both   3
3 Frank  Both   4

df2
  Name | Type | ID
0 Bill   Both    1
1 Jill   Both    2
2 Mill   B       3
3 Hill   A       4

ConcatDf:
  Name | Type | ID
0 Joe     A     1
1 Fred    B     2
2 Mike   Both   3
3 Frank  Both   4
0 Bill   Both   1
1 Jill   Both   2
2 Mill   B      3
3 Hill   A      4

假设之后是串联的,我想为Typedf1的所有记录以及{{1}的所有记录设置C }至df2。这可能吗?

数据帧的索引大小可以相差很大。

谢谢。

2 个答案:

答案 0 :(得分:0)

df3 = pd.concat([df1,df2], keys = (1,2))

df3.loc[(1), 'Type'] == 'C'

在连接时,您可以分配df的键。这将创建一个多索引,其键将分隔的df分开。然后,当您将.loc与按键一起使用时,可以在按键周围使用(来呼叫该群组。在上面的代码中,我们将df1的所有类型(键为1)更改为C。

答案 1 :(得分:0)

使用mergeindicator=True来查找属于df1df2的行。接下来,使用np.where分配AB

t = concatdf.merge(df1, how='left', on=concatdf.columns.tolist(), indicator=True)
concatdf['Type'] = np.where(t._merge.eq('left_only'), 'B', 'C')


Out[2185]:
    Name Type  ID
0    Joe    C   1
1   Fred    C   2
2   Mike    C   3
3  Frank    C   4
0   Bill    B   1
1   Jill    B   2
2   Mill    B   3
3   Hill    B   4