繁体   English   中英

根据另一个数据框的值在数据框中添加行

[英]Adding rows in dataframe based on values of another dataframe

我有以下两个数据框。 请注意,两个数据框中的“ amt”均按“ id”分组。

  df1

   id  code  amt
0   A    1    5
1   A    2    5
2   B    3    10
3   C    4    6
4   D    5    8
5   E    6    11

  df2 

    id  code amt
0   B   1    9
1   C   12   10

我想在添加一行df2每一个iddf1不包含在df2 例如,由于df2中不包含ID的A,D和E,因此我想为这些ID添加一行。 附加的行应包含df2不包含的id ,属性code null值和df1中的属性amt存储值

结果应该是这样的:

   id  code name
0   B    1    9
1   C    12   10
2   A    nan  5
3   D    nan  8
4   E    nan  11

如果能得到一些指导,我将不胜感激。

通过使用pd.concat

df=df1.drop('code',1).drop_duplicates()
df[~df.id.isin(df2.id)]
pd.concat([df2,df[~df.id.isin(df2.id)]],axis=0).rename(columns={'amt':'name'}).reset_index(drop=True)
Out[481]: 
   name  code id
0     9   1.0  B
1    10  12.0  C
2     5   NaN  A
3     8   NaN  D
4    11   NaN  E

df1放下dups,然后追加df2然后再放下更多dups,然后再次追加。

df2.append(
    df1.drop_duplicates('id').append(df2)
       .drop_duplicates('id', keep=False).assign(code=np.nan),
    ignore_index=True
)

  id  code  amt
0  B   1.0    9
1  C  12.0   10
2  A   NaN    5
3  D   NaN    8
4  E   NaN   11

轻微变化

m = ~np.in1d(df1.id.values, df2.id.values)
d = ~df1.duplicated('id').values

df2.append(df1[m & d].assign(code=np.nan), ignore_index=True)

  id  code  amt
0  B   1.0    9
1  C  12.0   10
2  A   NaN    5
3  D   NaN    8
4  E   NaN   11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM