我正在尝试列绑定嵌套(就像R的cbind()
一样),并与pandas concat
有问题,因为ignore_index=True
似乎不工作:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 2, 3, 4])
df2 = pd.DataFrame({'A1': ['A4', 'A5', 'A6', 'A7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D2': ['D4', 'D5', 'D6', 'D7']},
index=[5, 6, 7, 3])
df1
# A B D
# 0 A0 B0 D0
# 2 A1 B1 D1
# 3 A2 B2 D2
# 4 A3 B3 D3
df2
# A1 C D2
# 5 A4 C4 D4
# 6 A5 C5 D5
# 7 A6 C6 D6
# 3 A7 C7 D7
dfs = [df1, df2]
df = pd.concat(dfs, axis=1, ignore_index=True)
print df
字符串
并且结果被
0 1 2 3 4 5
0 A0 B0 D0 NaN NaN NaN
2 A1 B1 D1 NaN NaN NaN
3 A2 B2 D2 A7 C7 D7
4 A3 B3 D3 NaN NaN NaN
5 NaN NaN NaN A4 C4 D4
6 NaN NaN NaN A5 C5 D5
7 NaN NaN NaN A6 C6 D6
型
即使我使用
df1.reset_index()
df2.reset_index()
型
然后尝试
pd.concat([df1, df2], axis=1)
型
它仍然产生相同的结果!
预期的结果是一个6x 4的框架,其中列A、B、D、A1、C、D2的内容是水平连接的。
6条答案
按热度按时间yzuktlbb1#
如果我没理解错的话,这就是你想要做的。
字符串
该公式给出:
型
实际上,我希望
df = pd.concat(dfs, axis=1, ignore_index=True)
给出相同的结果。这是来自jreback的精彩解释:
ignore_index=True
'索引',意味着不在连接轴上对齐。它只是按照传递的顺序将它们粘贴在一起,然后为实际索引重新分配一个范围(例如range(len(index))
),因此在非重叠索引上连接(假设示例中为axis=1
),使用ignore_index=False
(默认值),您将获得索引的concat,而使用ignore_index=True
,您将获得范围。hk8txs482#
ignore_index选项在你的例子中起作用,你只需要知道它忽略了 * 连接轴 *,在你的例子中是列。(也许更好的名字是ignore_labels。)如果你想让连接忽略索引标签,那么你的轴变量必须设置为0(默认值)。
qlvxas9a3#
如果您想保留左侧 Dataframe 的索引,请使用
set_index
将df2的索引设置为df1:字符串
sz81bmfz4#
同意评论,最好总是发布预期的输出。
这就是你要找的吗?
字符串
6l7fqoea5#
你可以使用numpy的concatenate来实现这个结果。
字符串
nwnhqdif6#
出于某种原因,
ignore_index=True
在我的情况下没有帮助。我想保留第一个数据集的索引,忽略第二个索引。这对我很有效:字符串