不使用关键列合并两个数据框

4
我有一个需求,想要将两个数据框合并,但没有任何关键列。 enter image description here 从输入表格中,我将前三列视为一个数据框,将最后一列视为另一个数据框。我的计划是对第二个数据框进行排序,然后将其与第一个数据框合并,而不使用任何关键列,以使其看起来像上面的输出。 是否可以以这种方式合并,或者是否有其他替代方法?

1
我认为pd.concatpd.append是你正在寻找的,我正在进行一些挖掘。 - ChootsMagoots
看起来您想要对评论列进行排序?df['comments']' = df['comments'].sort_values() - C8H10N4O2
3个回答

2

一种方法是在过滤掉空值后使用pd.DataFrame.join

@ALollz提供的数据。

import pandas as pd

df1 = pd.DataFrame({'Country': ['USA', 'UK', 'Finland', 'Spain', 'Australia']})
df2 = pd.DataFrame({'Comments': ['X', None, 'Y', None, 'Z']})

res = df1.join(pd.DataFrame(list(filter(None, df2.values)), columns=['comments']))

结果:

     Country comments
0        USA        X
1         UK        Y
2    Finland        Z
3      Spain      NaN
4  Australia      NaN

1
如果你所说的“对第二个数据框进行排序”是指将NULL值移动到列表末尾并保持其余顺序不变,那么以下代码可以实现此功能。
import pandas as pd
df1 = pd.DataFrame({'Country': ['USA', 'UK', 'Finland', 'Spain', 'Australia'],
                   'Name': ['Sam', 'Chris', 'Jeff', 'Kartik', 'Mavenn']})
df2 = pd.DataFrame({'Comments': ['X', None, 'Y', None, 'Z']})

df1['Comments'] = df2[df2.Comments.notnull()].reset_index().drop(columns='index')

     Country    Name Comments
0        USA     Sam        X
1         UK   Chris        Y
2    Finland    Jeff        Z
3      Spain  Kartik      NaN
4  Australia  Mavenn      NaN

谢谢!我已经根据我的需求更新了代码,并将其纳入了我的程序中。但是,您能否告诉我reset_index的用途以及为什么要删除它? - Kishanu Bhattacharya
1
你需要重置索引,这样当你将评论添加到第一个数据框时,它会基于你的新排序进行添加。如果不这样做,它将使用原始索引,从而给出原始顺序,这是你不想要的。也许有一种更好的方法可以阻止重置索引创建名为“index”的列,但是该删除操作只是删除了不必要的列。 - ALollz
有一个疑问,当在Anaconda版本的Python上运行相同的代码时,drop(columns='index')会抛出无效参数的错误。@ALollZ - Kishanu Bhattacharya
你可能正在使用较旧版本的pandas,因为drop函数最近已更新。 - ALollz
1
如果你使用的是0.21.0之前的版本,我认为你应该使用drop('index', axis=1)。 - ALollz

1

我理解为:

input['Comments'] = input.Comments.sort_values().values

输出:

  Comments    Country    Name
1        X        USA     Sam
2        Y         UK   Chris
3        Z    Finland    Jeff
4      NaN      Spain  Kartik
5      NaN  Australia   Maven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接