当前位置: 首页 > 知识库问答 >
问题:

在熊猫中,如何水平连接,然后删除多余的列

刘畅
2023-03-14

假设我有两个数据帧。

DF1:col1,col2,col3,

DF2:col2,col4,col5

如何水平连接这两个数据帧,并使用col1、col2、col3、col4和col5?现在,我在做pd。concat([DF1,DF2],axis=1),但它最终有两个col2。假设两个col2中的所有值都相同,我只希望有一列。

共有3个答案

方通
2023-03-14
DF2.drop(DF2.columns[DF2.columns.isin(DF1.columns)],axis=1,inplace=True)

然后,

pd.concat([DF1, DF2], axis = 1)
谢学名
2023-03-14

DF2中不在DF1中的列使用difference,然后通过[]简单地选择它们:

DF1 = pd.DataFrame(columns=['col1', 'col2', 'col3'])
DF2 = pd.DataFrame(columns=['col2', 'col4', 'col5'])


DF2 = DF2[DF2.columns.difference(DF1.columns)]
print (DF2)
Empty DataFrame
Columns: [col4, col5]
Index: []

print (pd.concat([DF1, DF2], axis = 1))
Empty DataFrame
Columns: [col1, col2, col3, col4, col5]
Index: []

时间:

np.random.seed(123)

N = 1000
DF1 = pd.DataFrame(np.random.rand(N,3), columns=['col1', 'col2', 'col3'])
DF2 = pd.DataFrame(np.random.rand(N,3), columns=['col2', 'col4', 'col5'])

DF2['col2'] = DF1['col2']

In [408]: %timeit (pd.concat([DF1, DF2], axis = 1).T.drop_duplicates().T)
10 loops, best of 3: 122 ms per loop

In [409]: %timeit (pd.concat([DF1, DF2[DF2.columns.difference(DF1.columns)]], axis = 1))
1000 loops, best of 3: 979 µs per loop
N = 10000:
In [411]: %timeit (pd.concat([DF1, DF2], axis = 1).T.drop_duplicates().T)
1 loop, best of 3: 1.4 s per loop

In [412]: %timeit (pd.concat([DF1, DF2[DF2.columns.difference(DF1.columns)]], axis = 1))
1000 loops, best of 3: 1.12 ms per loop
李经国
2023-03-14

删除重复项应该有效。因为drop_duplicates只适用于索引,所以我们需要将DF转置为drop duplicates并将其转置回原处。

pd.concat([DF1, DF2], axis = 1).T.drop_duplicates().T
 类似资料:
  • 问题内容: 我有一个带有熊猫MultiIndex的数据框: 然后,我从该DataFrame中删除一些行: 但是当我查询MutliIndex时,它仍然在两个国家都处于其水平。 我可以用一种很奇怪的方式自己解决这个问题: 但这似乎很混乱。有什么更好的方法我想念吗? 问题答案: 这是以前咬过我的东西。出于性能和哲学上的考虑,删除列或行不会更改基础MultiIndex,并且正式不将其视为Bug(在此处了解

  • 这与关于这个主题的几个问题相似。

  • 问题内容: 我有一些数据,导入时会得到以下不需要的列,我正在寻找一种删除所有这些数据的简便方法 它们被0索引索引,所以我尝试了类似 但这不是很有效。我尝试编写一些for循环,但这使我感到震惊,因为熊猫的行为不佳。因此,我在这里问这个问题。 我已经看到了一些类似的示例(投递多列pandas),但这无法回答我的问题。 问题答案: 我不知道您所说的低效率是什么意思,但是如果您指的是打字,那么选择感兴趣的

  • 问题内容: 我遇到了一个看似简单的问题:在熊猫数据框中删除唯一的行。基本上与的相反。 假设这是我的数据: 当A和B唯一时,我想删除行,即我只保留行1和2。 我尝试了以下方法: 但是我只能得到第2行,因为唯一性是0、1和3! 问题答案: 选择所有重复行的解决方案: 您可以使用子集和参数来选择所有重复项: 解决方案: 对所有唯一行进行了一些修改的解决方案:

  • 现在我正在上一门机器学习课程。现在我应该导入我的数据集之后,我读了一个“CSV”文件导入我的数据集,我想删除一个列,但我不知道如何做。

  • 我有一个数据帧df: 然后我想删除列表中指示的具有某些序列号的行,假设这里是然后离开: 如何或什么功能可以做到这一点?