панды объединяются по индексу определенного столбца - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть три списка, которые выглядят так:

l1 = ["a", "b" , "c", "d", "e", "f", "g"]

l2 = ["a", "d", "f"]

l3 = ["b", "g"]

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

| l1 | l2   | l3   |
|----|------|------|
| a  | a    | None |
| b  | None | b    |
| c  | None | None |
| d  | d    | None |
| e  | None | None |
| f  | f    | None |
| g  | None | g    |

Я пытался использовать join / merge операций, но не смог понять это.

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Вы можете сделать это, используя списки:

import pandas as pd
import numpy as np

a = [i if i in l2 else np.nan for i in l1]
b = [i if i in l3 else np.nan for i in l1]

df = pd.DataFrame({'l1': l1, 'l2': a, 'l3': b})
print(df)

Вывод:

  l1   l2   l3
0  a    a  NaN
1  b  NaN    b
2  c  NaN  NaN
3  d    d  NaN
4  e  NaN  NaN
5  f    f  NaN
6  g  NaN    g
1 голос
/ 02 апреля 2019

В pd.merge есть несколько аргументов, которые вы можете использовать для этой цели: left_on, right_on и how.

left_on позволяет указать, к какому столбцу в левом кадре данных вы хотите присоединиться к пандам.

right_on аналогично left_on, но для правильного кадра данных.

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

Подробнее об этом: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge.html

Вы можете сделать что-то вроде этого:

l1 = ["a", "b" , "c", "d", "e", "f", "g"]
l2 = ["a", "d", "f"]
l3 = ["b", "g"]

df = pd.DataFrame({'l1': l1})
df_l2 = pd.DataFrame({'l2': l2})
df_l3 = pd.DataFrame({'l3': l3})
df = pd.merge(df, df_l2, left_on='l1', right_on='l2', how='left') 
df = pd.merge(df, df_l3, left_on='l1', right_on='l3', how='left') 

Выход:

l1   l2   l3
0  a    a  NaN
1  b  NaN    b
2  c  NaN  NaN
3  d    d  NaN
4  e  NaN  NaN
5  f    f  NaN
6  g  NaN    g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...