Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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 基于另一个数据帧的值在数据帧中添加行_Python_Pandas_Dataframe - Fatal编程技术网

Python 基于另一个数据帧的值在数据帧中添加行

Python 基于另一个数据帧的值在数据帧中添加行,python,pandas,dataframe,Python,Pandas,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中为df1的每个id添加一行df2。例如,由于Id的A、D

我有以下两个数据帧。请注意,“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
中为
df1
的每个
id
添加一行
df2
。例如,由于Id的A、D和E不包含在
df2
中,因此我想为这些Id添加一行。追加行应包含
df2
中未包含的
id
、属性
code
的空值以及属性
amt
df1
中存储的值

结果应该是这样的:

   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

使用
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
中删除DUP,然后追加
df2
,然后删除更多DUP,然后再次追加

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

df1
中删除DUP,然后追加
df2
,然后删除更多DUP,然后再次追加

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

@VenkateshMalhotra很高兴它有帮助:)
concat
append
@piRSquared的一个更灵活的版本,在我看到你的答案之前,我甚至不知道这个函数工具。。。学习新事物@VenkateshMalhotra很高兴它有帮助:)
concat
append
@piRSquared的一个更灵活的版本,在我看到你的答案之前,我甚至不知道这个函数工具。。。学习新事物!!