combine_first似乎没有任何影响数据帧



我有一个包含多行的表格,应该按照第一列中的数字分组。在其他列中,我需要将其合并到单行中。

我尝试了combine_first功能,但不明白为什么它不起作用。

我试图做到这一点:

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 行,这是我之前分配给它的那行

我会用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

试试这个:

df.where(df.ne(0)).groupby(['JobNumber','Column6'],as_index=False).first().fillna(0)

输出:

JobNumber Column6  Column7  Column8  Column9
0        647    KT35      1.0      1.5     0.00
1        817    KT35      4.0      1.7     1.00
2        915    KT35      1.0      1.0     2.03

旧答案:

我不确定这种情况的程度,但如果它像提供的示例那样在这两列之间交替,下面的代码应该可以工作。

df['col8'] = df['col8'].shift()
df = df.dropna(subset=['col8'])

相关内容

最新更新