Объединить несколько рядов в виде одного столбца в фрейм данных

#python #pandas

#python #pandas

Вопрос:

У меня есть следующие фреймы данных:

A.

    k  m  n
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x
4  x  x  x
5  x  x  x
6  x  x  x
7  x  x  x
8  x  x  x
9  x  x  x
  

B1.

    l   i  j
1  x  46  x
2  x  64  x
3  x  83  x
9  x  70  x
  

B2.

    l   i  j
0  x  23  x
4  x  34  x
6  x  54  x
8  x  32  x
  

B3.

    l   i  j
0  x  11  x
5  x  98  x
7  x  94  x
9  x  80  x
  

Как я могу добавить столбец «i» (из фреймов данных B1, B2 и B3) в фрейм данных A?

Что касается повторяющихся значений (например, индекс 9 в B1 и B3 и индекс 0 в B2 и B3), я хочу сохранить крайнее левое значение [B1, B2, B3] (например, 23 для индекса 0 и 70 для индекса 9).

Желаемый результат будет:

    k  m  n   i
0  x  x  x  23
1  x  x  x  46
2  x  x  x  64
3  x  x  x  83
4  x  x  x  34
5  x  x  x  98
6  x  x  x  54
7  x  x  x  94
8  x  x  x  32
9  x  x  x  70
  

Комментарии:

1. Можете ли вы предоставить желаемый результат A?

2. @null: я отредактировал свой исходный пост с желаемым результатом A.

Ответ №1:

вы можете concat использовать фреймы данных Bx и использовать duplicated в индексе, чтобы удалить дублированный индекс и сохранить первый.

 A['i'] = (pd.concat([B1, B2, B3])
            .loc[lambda x: ~x.index.duplicated(keep='first'), 'i'])
print(A)
   k  m  n   i
0  x  x  x  23
1  x  x  x  46
2  x  x  x  64
3  x  x  x  83
4  x  x  x  34
5  x  x  x  98
6  x  x  x  54
7  x  x  x  94
8  x  x  x  32
9  x  x  x  70