Pandas DataFrame объединяет / объединяет «Value1» в «Value2» - PullRequest
0 голосов
/ 20 октября 2019

У меня есть 2 кадра данных, которые я хочу объединить. В df1 он имеет «id» A, B, C, ... и в df2 он имеет «id» A1, A2, A3, ..., B1, B2, B3 ... Я хочу объединитьих при условии df1.id in df2.id. Я просмотрел учебные пособия и искал StackOverflow, но не увидел ничего релевантного.

Ключи df1 - это подмножество ключей в df2. Таким образом, простой pd.merge (df1, df2, on = 'id', how ...) приводит к неверному кадру данных.

SETUP:

dummy_data1 = {
        'id': ['A', 'B', 'C', 'D', 'E'],
        'Feature1': ['1', '2', '3', '4', '5'],
        'Feature2': ['6', '7', '8', '9', '10']}

dummy_data2 = {
        'id': ['A1', 'A2', 'A3', 'B1', 'B2'],
        'Feature1': ['a', 'b', 'c', 'd', 'e'],
        'Feature2': ['f', 'g', 'h', 'i', 'j']}

df1 = pd.DataFrame(dummy_data1, columns = dummy_data1.keys())
df2 = pd.DataFrame(dummy_data2, columns = dummy_data2.keys())

Желаемый вывод:

    id   Feature1_x   Feature2_x   Feature1_y   Feature2_y
0   A1   1            6            a            f
1   A2   1            6            b            g
2   A3   1            6            c            h
3   B1   2            7            d            i
4   B2   2            7            e            j

ПОПЫТКА 1:

newdf = pd.merge(df1['id'], df2['id'], on='id', how='inner')

РЕЗУЛЬТАТ 1:

Empty DataFrame
Columns: [id]
Index: []

ПОПЫТКА 2:

newdf = pd.merge(df1['id'], df2['id'], on='id', how='outer')

РЕЗУЛЬТАТ 2:

   id
0   A
1   B
2   C
3   D
4   E
5  A1
6  A2
7  A3
8  B1
9  B2

ПОПЫТКА 3:

newdf = pd.merge(df1['id'], df2['id'].str[:1], on='id', how='inner')

РЕЗУЛЬТАТ 3:

  id
0  A
1  A
2  A
3  B
4  B

1 Ответ

2 голосов
/ 20 октября 2019

Вы можете создать новый столбец, в котором есть только буквы от 'id'. Вы можете изменить регулярное выражение в соответствии с вашими потребностями. Затем вы можете объединить этот новый столбец и, наконец, получить нужные столбцы в результате.

df2['new_id'] = df2['id'].apply(lambda x: re.search(r'[A-Z]',x).group())

df1.merge(df2, left_on='id',right_on='new_id')[['id_y','Feature1_x','Feature2_x','Feature1_y','Feature2_y']]

    id_y    Feature1_x  Feature2_x  Feature1_y  Feature2_y
0   A1          1          6           a         f
1   A2          1          6           b         g
2   A3          1          6           c         h
3   B1          2          7           d         i
4   B2          2          7           e         j

Предположение: у вас есть id в df2 типа «A1», «A2», «B1» и т. Д.

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