简体   繁体   English

Pandas 数据框循环

[英]Pandas Dataframe looping

I'm stuck with the code below.我被下面的代码困住了。 Basically, I am looping through the first column of 2 dataframes with the loop variables 'analyticalname' and 'fedbatchname'.基本上,我正在使用循环变量“analyticalname”和“fedbatchname”循环遍历 2 个数据帧的第一列。 If these two variables find a match in each dataframe, then I want to access that element of the dataframe based on the value of the loop variable.如果这两个变量在每个数据帧中找到匹配项,那么我想根据循环变量的值访问数据帧的该元素。 When I run the code, however, I get a key error that originates at the line after the if statement.但是,当我运行代码时,我收到一个关键错误,该错误源自 if 语句之后的行。 In essence, I am asking how to access an element of a dataframe based on a loop variable.本质上,我问的是如何基于循环变量访问数据帧的元素。 Any suggestions?有什么建议?

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: Here is some sample data for both dataframes, I apologize for leaving that out.编辑:这是两个数据帧的一些示例数据,我很抱歉将其遗漏。 The fedbatch dataframe is meant to be empty, I am trying to copy the values from the analytical dataframe into the fedbatch dataframe. 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                                                  

Use merge with rename column for avoid it in output DataFrame with select only column RUN_NUMBER from fedbatchdata :使用merge与它的输出为避免重命名列DataFrame与选择只列RUN_NUMBERfedbatchdata

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM