我有两个数据帧,old_df
和df
:
old_df
Id col1 col2
0 Apple Good
1 Banana Good
df
col1 col2
Apple Normal
Pear Good
在附加old_df
和df
之后寻找的输出:
new_df
Id col1 col2
0 Apple Good
0 Apple Normal
1 Banana Good
2 Pear Good
我要解决的问题是,如何在条件col1
上附加两个数据帧:如果old_df
和df
col1
的值相同,则分配{ {1}}的{{1}}到old_df
的。如果不是,请通过为Id
的{{1}}值创建新的df
值来继续Id
。
编辑:
棘手的是,我必须继续为新入口分配新的ID号,并为现有入口提供旧的ID号。
答案 0 :(得分:2)
将concat
与sort_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涵盖了所有这些以及更多精彩的示例,有关数据帧的合并,联接和连接。