Python 先组合后组合';t似乎对数据帧有任何影响

Python 先组合后组合';t似乎对数据帧有任何影响,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个包含多行的表,它应该按第一列中的数字分组。在其他列中,有一些数据需要合并到一行中 我尝试了第一个函数,但不明白为什么它不起作用 我试图做到这一点: 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=

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

我尝试了第一个函数,但不明白为什么它不起作用

我试图做到这一点:

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,:])
但第一行似乎不起作用。df3.append(**)也不起作用
我不明白我的代码出了什么问题:/它没有显示任何错误,只是看起来我的循环对df3没有影响,因为当我打印出来时,它只有一行,我之前分配给它的那一行,我不确定这一点的程度,但是如果它在这两列之间交替出现,如所提供的示例中所示,下面的代码应该可以工作

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

我不确定这一点的范围,但如果它在这两个列之间交替出现,如所提供的示例中所示,下面的代码应该可以工作

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

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

欢迎来到stack。为了更快地获得帮助,请以非图像格式提供示例数据和所需输出。试着用语言简洁地解释你真正想要什么。您的代码可能很好,但人们不阅读代码,部分原因是他们可能有不同的代码编写风格,部分原因是错误通常出现在寻求帮助的人的代码中。@wwnde您好,我添加了一个源文件示例,并对文章进行了编辑,使其更为明确。我还应该补充什么?这两种解决方案是否回答了您的问题?欢迎使用stack。为了更快地获得帮助,请以非图像格式提供示例数据和所需输出。试着用语言简洁地解释你真正想要什么。您的代码可能很好,但人们不阅读代码,部分原因是他们可能有不同的代码编写风格,部分原因是错误通常出现在寻求帮助的人的代码中。@wwnde您好,我添加了一个源文件示例,并对文章进行了编辑,使其更为明确。我还应该补充什么?这两种解决方案是否回答了您的问题?