附加两个数据帧并继续分配Id

2024-04-26 11:04:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,old_dfdf

 old_df

 Id   col1    col2
 0    Apple   Good
 1    Banana  Good

 df

 col1   col2
 Apple  Normal
 Pear   Good

在附加old_dfdf之后我要查找的输出:

new_df

Id   col1   col2
0    Apple  Good
0    Apple  Normal
1    Banana Good
2    Pear   Good

我要解决的问题是,如何在col1上附加两个数据帧,条件是:如果old_dfdfcol1值相同,则将old_dfId赋值给df。如果不是,则继续Id,为dfcol1值创建新的Id值。你知道吗

编辑:

棘手的是,我必须继续为新入口分配新的身份证号码,并为现有入口提供旧的身份证号码。你知道吗


Tags: 数据idappledfnew条件old号码
2条回答

数据帧可以使用concat方法连接,并使用sort_values方法排序。你知道吗

要提供完整的示例,可以使用以下代码创建所需的数据帧:

# import pandas
import pandas as pd

# create dataframes
old_df = pd.DataFrame(
    [[0, 'Apple', 'Good'],
    [1, 'Banana', 'Good']],
    columns=['id', 'col1', 'col2'])

df = pd.DataFrame(
    [['Apple', 'Normal'],
    ['Pear', 'Good']],
    columns=['col1', 'col2'])

然后,此代码将允许您加入数据、创建id列和排序。你知道吗

# join data frames
new_df = pd.concat([old_df, df])

# create the id field by using astype('category')
new_df.id = new_df.col1.astype('category').cat.codes

 # reorder columns and sort data frame by id
new_df = new_df[['id', 'col1', 'col2']].sort_values(by='id')

# print results
print(new_df.head())

结果如下:

   id    col1    col2
0   0   Apple    Good
0   0   Apple  Normal
1   1  Banana    Good
1   2    Pear    Good

关于合并、连接和连接数据帧的pandas documentation中介绍了所有这些以及更多优秀的示例。你知道吗

使用concatsort_values,然后使用category重新创建Id

newdf=pd.concat([dfold,df],sort=True).sort_values(['col1','Id'])
newdf.Id=newdf.col1.astype('category').cat.codes
newdf
Out[62]: 
   Id    col1    col2
0   0   Apple    Good
0   0   Apple  Normal
1   1  Banana    Good
1   2    Pear    Good

相关问题 更多 >