Python 基于另一个数据帧的值在数据帧中添加行
我有以下两个数据帧。请注意,“amt”在两个数据帧中均按“id”分组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
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的一个更灵活的版本,在我看到你的答案之前,我甚至不知道这个函数工具。。。学习新事物!!