我有一个包含多行的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();
}
答案 0 :(得分:3)
IIUC,DataFrame.groupby
+ as_index=False
和GroupBy.first
消除了NaN
。
#df = df.replace('NAN',np.nan) #If necessary
df.groupby(['Id','Name'],as_index=False).first()
如果您认为它在某些列中可能具有一对具有非空值的ID名称,则可以使用GroupBy.apply
和Series.ffill
和Series.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()
仅当每个列的每个名称只有一个有效值时,此选项才起作用。