Python在dataframe中选择并添加列的行值以创建聚合的dataframe
我需要用Python处理我的数据帧,以便添加位于数据帧两行之间的数值列的数值 数据帧可以使用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,'
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
以图片形式发布代码或数据是不好的。无法将图片复制并粘贴到代码编辑器中。因此,要有人帮忙会困难得多,也就不太可能了。为了最大限度地利用网站,重要的是,包括创建一个示例。