Pandas Dataframe looping

1

Я застрял в коде ниже. В принципе, я прохожу через первый столбец из 2 кадров данных с аналитическими именами циклов и "fedbatchname". Если эти две переменные находят совпадение в каждом фрейме данных, я хочу получить доступ к этому элементу фрейма данных на основе значения переменной цикла. Однако, когда я запускаю код, я получаю ключевую ошибку, которая возникает в строке после оператора if. По сути, я спрашиваю, как получить доступ к элементу фрейма данных, основанному на переменной цикла. Какие-либо предложения?

import pandas as pd
analyticaldata = pd.read_csv('SE-HPLC.csv', usecols = ['Sample ID','% 
Aggregate','% Monomer','% Fragment']) #loading data into pandas DataFrame
fedbatchdata = pd.read_csv('Culture Day Sheet.csv',usecols = 
['RUN_NUMBER','% Aggregate','% Monomer','% Fragment'])

for analyticalname in analyticaldata['Sample ID']: #for each element in 
first column of SE-HPLC worksheet
for fedbatchname in fedbatchdata['RUN_NUMBER']: #for each element in first column of Culture Day worksheet
    if analyticalname == fedbatchname: #if any of the names match
        fedbatchdata.ix[fedbatchdata.fedbatchname,'% Aggregate'] = analyticaldata[analyticalname]['% Aggregate']
        fedbatchdata.ix[fedbatchdata.fedbatchname,'% Monomer'] = analyticaldata.ix[analyticalname,'% Monomer']                  
        fedbatchdata.ix[fedbatchdata.fedbatchname,'% Fragment'] = analyticaldata.ix[analyticalname,'% Fragment']

EDIT: Вот некоторые примеры данных для обоих кадров данных, я приношу свои извинения за это. Ядро fedbatch должно быть пустым, я пытаюсь скопировать значения из аналитического фрейма в фреймворк fedbatch.

Analytical dataframe:
SAMPLE_ID:    % Aggregate    % Monomer    % Fragment
A               2             4             1.5
B               1             4             6
C               5             5             2.1
D               3             7.1           10

Fed Batch Dataframe:
RUN_NUMBER:    % Aggregate    % Monomer    % Fragment
B                                        
A                                                                                   
C
D                                                  
  • 0
    Можете ли вы добавить образец данных? Выглядит так, как будто бы нуждаются в analyticaldata.merge(fedbatchdata, left_on=['Sample ID'], right_on=['RUN_NUMBER'])
  • 0
    Пожалуйста, добавьте это к вопросу.
Показать ещё 5 комментариев
Теги:
pandas
dataframe

1 ответ

1
Лучший ответ

Используйте merge с столбцом переименования, чтобы избежать его в выводе DataFrame с только столбцом RUN_NUMBER fedbatchdata: RUN_NUMBER из fedbatchdata:

df = (fedbatchdata[['RUN_NUMBER']]
                    .merge(analyticaldata.rename(columns={'Sample ID':'RUN_NUMBER'}), 
                          on=['RUN_NUMBER'], 
                          how='left'))
print (df)
  RUN_NUMBER  % Aggregate  % Monomer  % Fragment
0          B            1        4.0         6.0
1          A            2        4.0         1.5
2          C            5        5.0         2.1
3          D            3        7.1        10.0
  • 0
    Код работал бы, если бы значения в RUN_NUMBERS и SAMPLE_ID были в одном и том же порядке, но это не так, поэтому я считаю, что мне нужно пройтись по столбцу, чтобы найти совпадения, а затем скопировать данные, нет?
  • 0
    @AP - Ответ отредактирован, поменялся местами DataFrames.
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню