追加两个数据框并继续分配ID

时间:2019-01-22 14:59:08

标签: python pandas dataframe append

我有两个数据帧,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_dfdf col1的值相同,则分配{ {1}}的{​​{1}}到old_df的。如果不是,请通过为Id的{​​{1}}值创建新的df值来继续Id

编辑:

棘手的是,我必须继续为新入口分配新的ID号,并为现有入口提供旧的ID号。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

可以使用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涵盖了所有这些以及更多精彩的示例,有关数据帧的合并,联接和连接。