Python在dataframe中选择并添加列的行值以创建聚合的dataframe

Python在dataframe中选择并添加列的行值以创建聚合的dataframe,python,pandas,dataframe,Python,Pandas,Dataframe,我需要用Python处理我的数据帧,以便添加位于数据帧两行之间的数值列的数值 数据帧可以使用 df = pd.DataFrame(np.array([['a',0,1,0,0,0,0,'i'], ['b',1,0,0,0,0,0,'j'], ['c',0,0,1,0,0,0,'k'], ['None',0,0,0,1,0,0,'

我需要用Python处理我的数据帧,以便添加位于数据帧两行之间的数值列的数值

数据帧可以使用

df = pd.DataFrame(np.array([['a',0,1,0,0,0,0,'i'],
                            ['b',1,0,0,0,0,0,'j'],
                            ['c',0,0,1,0,0,0,'k'], 
                            ['None',0,0,0,1,0,0,'l'], 
                            ['e',0,0,0,0,1,0,'m'], 
                            ['f',0,1,0,0,0,0,'n'], 
                            ['None',0,0,0,1,0,0,'o'], 
                            ['h',0,0,0,0,1,0,'p']]),
                            columns=[0,1,2,3,4,5,6,7],
                            index=[0,1,2,3,4,5,6,7])

我需要添加出现在“None”项之前的所有行,并将聚合行移动到新的数据框中,该数据框应如下所示:


您的数据帧数据类型混乱,因为您正在使用数组分配值,因为一个数组只接受一种类型,所以它会将所有int推送到字符串,我们需要首先转换它

df=df.apply(pd.to_numeric,errors ='ignore')# convert

df['newkey']=df[0].eq('None').cumsum()# using cumsum create the key 
df.loc[df[0].ne('None'),:].groupby('newkey').agg(lambda x : x.sum() if x.dtype=='int64' else x.head(1))# then we agg
Out[742]: 
        0  1  2  3  4  5  6  7
newkey                        
0       a  1  1  1  0  0  0  i
1       e  0  1  0  0  1  0  m
2       h  0  0  0  0  1  0  p

您还可以指定
agg
函数

s = lambda s: sum(int(k) for k in s)
d = {i: s for i in range(8)}
d.update({0: 'first', 7: 'first'})
df.groupby((df[0] == 'None').cumsum().shift().fillna(0)).agg(d)


    0   1   2   3   4   5   6   7
0                               
0.0 a   1   1   1   1   0   0   i
1.0 e   0   1   0   1   1   0   m
2.0 h   0   0   0   0   1   0   p

以图片形式发布代码或数据是不好的。无法将图片复制并粘贴到代码编辑器中。因此,要有人帮忙会困难得多,也就不太可能了。为了最大限度地利用网站,重要的是,包括创建一个示例。