使用python熊猫将csv文件中的多行合并为一行

时间:2020-01-15 07:52:42

标签: python database pandas pandas-groupby

我有一个包含多行的csv文件,如下所述

function customerBarCode_c(){
            $result=$this->itemMaster_m->customerBarCode_m();
            $tabRow ="";
            $i=1;
            $status='i';
            foreach ($result as $row)
            {
                $tabRow.= '<tr><td>'.$i.'</td><td id="eacctCol" class="eacctCol">'.$row['customer_name'].'</td><td class="bar code"><data-id="barCode'.$i.'">'.$row['BARCODE'].'</td><td class="description"><data-id="desc'.$i.'">'.$row['DESCRIPTION'].'</td><td><button type="button" style="background-color:transparent; border-color:transparent; color:red" id="btnDel"><i class="fa fa-close" data-id="close'.$i.'"></i></button></td><td>'.$row['CUSTOMER_CODE'].'</td><td>'.$status.'</td></tr>';
                $i++;
            }
            if($result){
                $response=array("status"=>true,"tableData"=>$tabRow);
            }
            else{
                $response=array("status"=>false);
            }
            echo json_encode($response);
}

我想使用python中的pandas将具有相同ID和名称的行合并为单个行。输出应为:

function customerBarCode_m(){
        $itemId=$this->input->post('itemCode');
        $query=$this->db->query("select A.*,B.ACCTNAME as customer_name from customer_bar_code A, ledger_accounts B where A.CUSTOMER_CODE=B.ACCTCODE and ITEM_CODE='".$itemId."'");
        return $query->result_array();
}

2 个答案:

答案 0 :(得分:3)

IIUC,DataFrame.groupby + as_index=FalseGroupBy.first消除了NaN

#df = df.replace('NAN',np.nan) #If necessary
df.groupby(['Id','Name'],as_index=False).first()

如果您认为它在某些列中可能具有一对具有非空值的ID名称,则可以使用GroupBy.applySeries.ffillSeries.bfill + DataFrame.drop_duplicates保留所有信息。

df.groupby(['Id','Name']).apply(lambda x: x.ffill().bfill()).drop_duplicates()

输出

   Id Name Marks1 Marks2 Marks3 Marks4  Marks5
0   1  ABC     10     18     16     17     NaN
1   2  BCD     15     10    NaN     15     NaN
2   3  CDE     17    NaN     19    NaN     NaN

答案 1 :(得分:0)

H谐的回答:

pd.groupby(“Name”).mean().reset_index()

仅当每个列的每个名称只有一个有效值时,此选项才起作用。