Есть ли способ горизонтальной конкатенации фреймов данных одинаковой длины при игнорировании индекса? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть кадры данных, которые я хочу объединить по горизонтали, игнорируя при этом индекс.

Я знаю, что для арифметических операций игнорирование индекса может привести к значительному ускорению, если вы используете массив numpy .values вместо серии 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

Я знаю, что могу получить желаемый результат, сбросив индекс df2, но мне интересно, есть ли более быстрый (возможно, тупой метод) для этого?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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

Панды вариант с 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
0 голосов
/ 09 мая 2018

Чистый метод 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)

это может быть легко преобразовано в df, передавая это как аргумент данных в DataFramector:

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

в отношении того, являются ли данные смежными, отдельные столбцы будут обрабатываться как отдельные массивы, поскольку это, по сути, требование Series, так как при передаче пустых массивов распределение не выполняетсяпамяти и копирования, необходимых здесь для простого и однородного dtype, поэтому он должен быть быстрым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...