Простое добавление DataFrames разных размеров в Pandas - PullRequest
0 голосов
/ 16 марта 2020

У меня 2 очень простые проблемы с добавлением Pandas, надеюсь, вы мне поможете.

Мой первый вопрос:

Допустим, у меня есть следующие два кадра данных: a_df и b_df

a = [[1,1,1,1],[0,0,0,0],[1,1,0,0]]
a_df = pd.DataFrame(a)

a_df = 
   0  1  2  3
0  1  1  1  1
1  0  0  0  0
2  1  1  0  0


b = [1,1,1,1]
b_df = pd.DataFrame(b).T

b_df=
   0  1  2  3
0  1  1  1  1

Я хотел бы добавить b_df к a_df, чтобы получить c_df таким образом, чтобы мой ожидаемый результат был следующим:

c_df = 
   0  1  2  3
0  2  2  2  2
1  1  1  1  1
2  2  2  1  1

Текущий метод, который я использую, повторяет b_df до того же размера a_df и выполняет сложение , показано ниже. Однако этот метод не очень эффективен, если мой a_df очень очень большой.

a = [[1,1,1,1],[0,0,0,0],[1,1,0,0]]
a_df = pd.DataFrame(a)

b = [1,1,1,1]
b_df = pd.DataFrame(b).T
b_df = pd.concat([b_df]*len(a_df)).reset_index(drop=True)

c_df = a_df + b_df

Есть ли другие способы добавить b_df (без его репликации) к a_df, чтобы получить то, что я хочу, чтобы c_df было?

Мой второй вопрос очень похож на мой первый:

Допустим, у меня есть d_df и e_df следующим образом:

d = [1,1,1,1]
d_df = pd.DataFrame(d)

d_df=
   0
0  1
1  1
2  1
3  1



e = [1]
e_df = pd.DataFrame(e)

e_df=
   0
0  1

Я хочу добавить e_df к d_df так, чтобы Я получил бы следующий результат:

   0
0  2
1  2
2  2
3  2

Опять текущий ток, который я копирую e_df, используя следующий метод (такой же, как вопрос 1) перед добавлением с d_df

d = [1,1,1,1]
d_df = pd.DataFrame(d)

e = [1]
e_df = pd.DataFrame(e)
e_df = pd.concat([e_df]*len(d_df)).reset_index(drop=True)

f_df = d_df + e_df

Есть ли способ без репликации e_df?

Пожалуйста, сообщите и помогите мне. Большое спасибо в продвинутом

Томми

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Попробуйте это:

    pd.DataFrame(a_df.to_numpy() + b_df.to_numpy())


    0   1   2   3
0   2   2   2   2
1   1   1   1   1
2   2   2   1   1

numpy предлагает функции вещания, которые позволяют добавлять желаемый способ, если форма похожа на одном конце. Я чувствую, что кто-то ответил что-то похожее на это раньше. Как только я нахожу это, я буду ссылаться на это здесь.
Эта статья из numpy довольно хорошо объясняет вещание

1 голос
/ 16 марта 2020

Для первого преобразования один ряд DataFrame в Series:

c_df = a_df + b_df.iloc[0]
print (c_df)
   0  1  2  3
0  2  2  2  2
1  1  1  1  1
2  2  2  1  1

Тот же принцип для второго:

c_df = d_df + e_df.iloc[0]
print (c_df)
   0
0  2
1  2
2  2
3  2

Более подробную информацию можно найти в Как работать с DataFrame с серией для каждого столбца .

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