Заполнить фрейм данных соответствует имени столбца - PullRequest
1 голос
/ 13 января 2020

У меня есть df df1 с N столбцами, заполненными значением, еще один df2, пустой с M столбцами (M> N). У меня есть 2 списка, представляющих все имена столбцов df1 и соответствующие имена столбцов в источнике df2, упорядоченные.

Пример: list1[0] -> list2[0]

Я мог бы заполнить данные от df1 до df2 старым для l oop, и я собираюсь сделать то же самое, но в более питонический / панда / функциональный способ.

df1
    A   B   C   D
0   94  18  47  1
1   75  40  30  97
2   14  56  63  89
3   28  74  25  59
list1 = ["A", "B", "C", "D"]
list2 = ["Z1", "Z3", "Z4", "Z8"]

Ожидаемый результат:

df2
    Z1  Z2  Z3  Z4  Z5  Z6  Z7  Z8
0   94      18  47               1
1   75      40  30              97
2   14      56  63              89
3   28      74  25              59

Ответы [ 2 ]

5 голосов
/ 13 января 2020

Идея - это rename имена столбцов с помощью dict, созданные с помощью zip столбцов, а затем использовать DataFrame.reindex с именами столбцов второго DataFrame:

df = df1.rename(columns=dict(zip(list1, list2))).reindex(df2.columns, axis=1)
print (df)
   Z1  Z2  Z3  Z4  Z5  Z6  Z7  Z8
0  94 NaN  18  47 NaN NaN NaN   1
1  75 NaN  40  30 NaN NaN NaN  97
2  14 NaN  56  63 NaN NaN NaN  89
3  28 NaN  74  25 NaN NaN NaN  59

Подробности :

print (dict(zip(list1, list2)))
{'A': 'Z1', 'B': 'Z3', 'C': 'Z4', 'D': 'Z8'}

print (df1.rename(columns=dict(zip(list1, list2))))
   Z1  Z3  Z4  Z8
0  94  18  47   1
1  75  40  30  97
2  14  56  63  89
3  28  74  25  59
2 голосов
/ 13 января 2020

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

import pandas as pd

# your code

df2 = df1.copy()
df2.columns = ["Z1", "Z3", "Z4", "Z8"]
df2["Z2"] = pd.np.NaN
df2["Z5"] = pd.np.NaN
df2["Z6"] = pd.np.NaN
df2["Z7"] = pd.np.NaN
...