Как создать новые столбцы с использованием синтаксиса .loc? - PullRequest
4 голосов
/ 11 октября 2019

У меня есть список имен столбцов (cols), которые существуют в одном кадре данных.

Я хочу вставить столбцы с этими именами в другом кадре данных.

Поэтому я используюцикл for для итерации списка и создания столбцов один за другим:

cols = ['DEPTID', 'ACCOUNT', 'JRNL LINE DESCRIPTION', 'JRNL DATE', 'BASE AMOUNT', 'FOREIGN CURRENCY', 'FOREIGN AMOUNT', 'JRNL SOURCE']
for col in cols:
    # "summary" and "obiee" are dataframes
    summary.loc[obiee['mapid'], col] = obiee[col].tolist()

Однако я бы хотел избавиться от цикла for.

Итак, у меня естьпопытался назначить несколько столбцов с использованием синтаксиса .loc:

cols = ['DEPTID', 'ACCOUNT', 'JRNL LINE DESCRIPTION', 'JRNL DATE', 'BASE AMOUNT', 'FOREIGN CURRENCY', 'FOREIGN AMOUNT', 'JRNL SOURCE']
summary.loc[obiee['mapid'], cols] = obiee[cols]

, но Pandas выдаст ошибку:

KeyError: "['DEPTID' 'ACCOUNT' 'JRNL LINE DESCRIPTION' 'JRNL DATE' 'BASE AMOUNT'\n 'FOREIGN CURRENCY' 'FOREIGN AMOUNT' 'JRNL SOURCE'] not in index"

Разве это невозможно с этим синтаксисом? Как я могу сделать это иначе?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

join

Вы можете создать новый фрейм данных, а затем join. Из описания вашей проблемы и примера кода 'mapid' представляет значения индекса в кадре данных summary. join сделано для слияния по индексу. Таким образом, установив индекс obiee на 'mapid', а затем взяв соответствующие столбцы, мы можем просто использовать join.

summary.join(obiee.set_index('mapid')[cols])
1 голос
/ 11 октября 2019

у вас есть dataFrame df1 .. с некоторыми столбцами ...

И вы хотите, чтобы они были в df2 ... все, что вам нужно сделать, это просто приравнять их, как показано ниже

df2 = pd.DataFrame({ 'A' : 1.,
   ....:                      'B' : pd.Timestamp('20130102'),
   ....:                      'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
   ....:                      'D' : np.array([3] * 4,dtype='int32'),
   ....:                      'E' : pd.Categorical(["test","train","test","train"]),
   ....:                      'F' : 'foo' })
df1 = pd.DataFrame({ 'G' : 1.,
   ....:                      'H' : pd.Timestamp('20130102'),
   ....:                      'I' : pd.Series(1,index=list(range(4)),dtype='float32'),
   ....:                      'J' : np.array([3] * 4,dtype='int32'),
   ....:                      'K' : pd.Categorical(["test","train","test","train"]),
   ....:                      'L' : 'foo' })
df2['G'],df2['F'] = df1['G'],df1['H']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...