[英]pandas: how to merge columns irrespective of index
我有两个具有无意义索引的数据框,但经过精心策划的顺序,我想在保留该顺序的同时合并它们。 因此,例如:
>>> df1
First
a 1
b 3
和
>>> df2
c 2
d 4
合并后,我想要得到的是这样的:
>>> Desired_output
First Second
AnythingAtAll 1 2 # <--- Row Names are meaningless.
SeriouslyIDontCare 3 4 # <--- But the ORDER of the rows is critical and must be preserved.
我有行索引“a/b”和“c/d”这一事实无关紧要,但关键是行出现的顺序。 我见过的每个版本的“加入”都需要我手动重置索引,这看起来真的很尴尬,而且我不相信它不会搞砸排序。 我认为concat
会起作用,但我明白了:
>>> pd.concat( [df1, df2] , axis = 1, ignore_index= True )
0 1
a 1.0 NaN
b 3.0 NaN
c NaN 2.0
d NaN 4.0
# ^ obviously not what I want.
即使我明确声明了ignore_index
。
如何“否决”索引并强制将列与按照我提供它们的确切顺序保留的行合并?
ignore_index
表示是否沿axis
保留 output dataframe 索引。 如果为 True,则表示不使用原始索引,而是从 0 到 n 开始,就像结果中显示的 header 0, 1
列一样。
你可以试试
out = pd.concat( [df1.reset_index(drop=True), df2.reset_index(drop=True)] , axis = 1)
print(out)
First Second
0 1 2
1 3 4
我认为这也应该有效:
df1["second"] = df2["second"].values
它将保留第一个 dataframe 的索引,但由于您在那里有诸如“AnyThingAtAll”和“SeriouslyIdontCare”之类的值,我猜任何索引值都是可以接受的。
基本上,我们只是将您的系列中的值作为新列添加到第一个 dataframe。
这是一个类似于您描述的问题的测试示例:
# -----------
# sample data
# -----------
df1 = pd.DataFrame(
{
'x': ['a','b'],
'First': [1,3],
})
df1.set_index("x", drop=True, inplace=True)
df2 = pd.DataFrame(
{
'x': ['c','d'],
'Second': [2, 4],
})
df2.set_index("x", drop=True, inplace=True)
# ---------------------------------------------
# Add series as a new column to first dataframe
# ---------------------------------------------
df1["Second"] = df2["Second"].values
结果是:
第一的 | 第二 | |
---|---|---|
一个 | 1 | 2 |
b | 3 | 4 |
目标是结合基于 position 的数据(不是按索引)。 这是一种方法:
import pandas as pd
# create data frames df1 and df2
df1 = pd.DataFrame(data = {'First': [1, 3]}, index=['a', 'b'])
df2 = pd.DataFrame(data = {'Second': [2, 4]}, index = ['c', 'd'])
# add a column to df1 -- add by position, not by Index
df1['Second'] = df2['Second'].values
print(df1)
First Second
a 1 2
b 3 4
您可以像这样创建一个全新的数据框:
data = {'1st': df1['First'].values, '2nd': df1['Second'].values}
print(pd.DataFrame(data))
1st 2nd
0 1 2
1 3 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.