有没有办法在忽略索引的同时水平连接相同长度的数据帧?

The*_*Cat 5 dataframe pandas

我有数据框,我想在忽略索引的同时水平连接。

我知道对于算术运算,如果您使用 numpy 数组.values而不是 pandas 系列,则忽略索引会导致显着的加速。是否可以在忽略索引的同时水平连接或合并 Pandas 数据帧?(令我沮丧的是,ignore_index=True 会做其他事情。)如果是这样,它会提高速度吗?

import pandas as pd

df1 = pd.Series(range(10)).to_frame()

df2 = pd.Series(range(10), index=range(10, 20)).to_frame()

pd.concat([df1, df2], axis=1)
#      0    0
# 0   0.0  NaN
# 1   1.0  NaN
# 2   2.0  NaN
# 3   3.0  NaN
# 4   4.0  NaN
# 5   5.0  NaN
# 6   6.0  NaN
# 7   7.0  NaN
# 8   8.0  NaN
# 9   9.0  NaN
# 10  NaN  0.0
# 11  NaN  1.0
# 12  NaN  2.0
# 13  NaN  3.0
# 14  NaN  4.0
# 15  NaN  5.0
# 16  NaN  6.0
# 17  NaN  7.0
# 18  NaN  8.0
# 19  NaN  9.0
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过重置 df2 的索引来得到我想要的结果,但我想知道是否有更快的(也许是 numpy 方法)来做到这一点?

piR*_*red 6

np.column_stack

绝对等同于 EdChum 的回答。

pd.DataFrame(
    np.column_stack([df1,df2]),
    columns=df1.columns.append(df2.columns)
)

   0  0
0  0  0
1  1  1
2  2  2
3  3  3
4  4  4
5  5  5
6  6  6
7  7  7
8  8  8
9  9  9
Run Code Online (Sandbox Code Playgroud)

熊猫选项 assign

您可以使用新列做很多事情。
我不推荐这个!

df1.assign(**df2.add_suffix('_').to_dict('l'))

   0  0_
0  0   0
1  1   1
2  2   2
3  3   3
4  4   4
5  5   5
6  6   6
7  7   7
8  8   8
9  9   9
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 4

纯 numpy 方法是使用np.hstack:

In[33]:
np.hstack([df1,df2])

Out[33]: 
array([[0, 0],
       [1, 1],
       [2, 2],
       [3, 3],
       [4, 4],
       [5, 5],
       [6, 6],
       [7, 7],
       [8, 8],
       [9, 9]], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

通过将其作为数据参数传递给 ctor,可以轻松地将其转换为 df DataFrame:

In[34]:
pd.DataFrame(np.hstack([df1,df2]))

Out[34]: 
   0  1
0  0  0
1  1  1
2  2  2
3  3  3
4  4  4
5  5  5
6  6  6
7  7  7
8  8  8
9  9  9
Run Code Online (Sandbox Code Playgroud)

关于数据是否连续,各个列将被视为单独的数组,因为它本质上是一个字典Series,当您传递 numpy 数组时,这里不需要分配内存和复制来实现简单且同构的数据类型,因此应该快点。