![](/img/trans.png)
[英]pandas DataFrame combine_first and update methods have strange behavior
[英]combine_first doesn't seems to have any affect dataframe
我有一個包含多行的表,應該按第一列中的數字分組。 在其他列中有我需要合並到單行的數據。
我試過 combine_first function,但不明白為什么它不起作用。
我試圖做到這一點:
df6=pd.DataFrame({'JobNumber':[647,817,915], 'Column6':['KT35','KT35','KT35'],'Column7':[1, 4, 1],
'Column8':[1.5, 1.7 ,1], 'Column9':[0,1,2.03]})
由此:
df=pd.DataFrame({'JobNumber':[647,647,817,817,817, 915,915,915],'Column6':['KT35','KT35','KT35','KT35','KT35','KT35','KT35','KT35'],
'Column7':[0, 1, 0, 0 , 4, 1, 0, 0],'Column8':[1.5, 0 ,0 ,1.7,0,0,0,1], 'Column9':[0,0,1,0,0,0,2.03,0]})
換句話說,我正在嘗試為每個 JobNumber 創建一行,並將所有數據放在一行中。
我想出了這個代碼:
df2 = pd.read_excel(file.xlsx)
df2.columns=['JobNumber','Column6','Column7','Column8','Column9']
df3 = df2.loc[[0],:]
for i in range(len(df2.JobNumber)):
JobNum = df2.iloc[i, 0]
if df2.iloc[i,0] == df2.iloc[i-1, 0]:
df3.loc[df3.JobNumber == JobNum,:] = df3.loc[df3.JobNumber == JobNum,:].combine_first(df2.iloc[[i],:])
else:
df3.append(df2.iloc[i,:])
但是 combine_first 行似乎不起作用。 df3.append(**) 也不起作用我不明白我的代碼有什么問題:/ 它沒有顯示任何錯誤,看起來我的循環對 df3 沒有影響,因為當我打印它時出來它只有1行,我之前分配給它的那一行
我不確定這種情況的程度,但如果它像提供的示例中那樣在這兩列之間交替,則下面的代碼應該可以工作。
df['col8'] = df['col8'].shift()
df = df.dropna(subset=['col8'])
我''
用NaN
填充空白
df.replace('', np.nan)
我會同時使用.ffill()
和bfill()
然后刪除.duplicates()
請參閱下面的模擬數據和解決方案。 我所做的就是將上述方法鏈接在一起
數據
df=pd.DataFrame({'Column5':[647,647,817,817],'Column6':['KT35','KT35','KT35','KT35'],'Column7':['',1,'',1],'Column8':[1.5,'',2,''], 'Column9':['','','','']})
print(df)
Column5 Column6 Column7 Column8 Column9
0 647 KT35 1.5
1 647 KT35 1
2 817 KT35 2
3 817 KT35 1
df=df.replace('', np.nan).ffill().bfill().drop_duplicates(keep='first')
print(df)
Column5 Column6 Column7 Column8 Column9
0 647 KT35 1.0 1.5 NaN
2 817 KT35 1.0 2.0 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.