我有一个位置为k,y的pandas数据帧。
pos k y
123 0.7 0.5
124 0.4 0.1
125 0.3 0.2
126 0.4 0.1
128 0.3 0.6
130 0.4 0.9
131 0.3 0.2我想把k和y处的信息求和如下
123 1.1 0.6
125 0.7 0.3
128 0.3 0.6
130 0.7 1.1因此,输出只有第一个位置和值的总和,第一个和紧随其后的连续数字。
我试着按熊猫分组
for k,g in df.groupby(df['pos'] - np.arange(df.shape[0])):
u=g.ix[0:,2:].sum()但它的分组都是我不想要的连续数字
另外,我需要更快的东西,因为我的数据文件中有2611774行
发布于 2016-02-03 20:35:16
希望这能解决你的问题
import pandas as pd
df = pd.DataFrame( columns=['pos','k','y'])
cf = pd.DataFrame( columns=['pos','k','y'])
df['pos']=123, 124,125,126,128,130,131
df['k']=.7,.4,.3,.4,.3,.4,.3
df['y']=.5,.1,.2,.1,.6,.9,.2
row=0
while 1:
if row+1<len(df):
if(df.loc[row]['pos']+1==df.loc[row+1]['pos']):
cf.loc[row]= df.loc[row]+df.loc[row+1]
cf.loc[row]['pos']=df.loc[row]['pos']
row=row+2
else:
cf.loc[row]= df.loc[row]
row=row+1
else:
break
print cf发布于 2016-02-03 21:30:57
我以前没有使用过pandas,但如果你有机会将数据作为列表使用,那么这应该是可行的。
def SumNext(L):
N = xrange(len(L)-1)
Output = [L[i]+L[i+1] for i in N]
return Output如果你输入一个列表,这个函数会给你一个连续元素的总和。
A=1,1,2,3,5,8,13 SumNext(A) => 2,3,5,8,13
然后你只需要把值读到你喜欢的任何地方,当你得到很多元素时,在列表中做事情要快得多(而不是while循环)。
然后,您只需要弄清楚将输出传递回数据帧的实现。
发布于 2018-04-23 08:47:50
也许这比循环更快,但它不会像我想的那样将位置123和124相加,然后是130和131,因为它将奇数位置与其连续的129和130,131和132相加。
df = df.set_index('pos')
df_odd = df.loc[df.index.values % 2 == 1]
df_even = df.loc[df.index.values % 2 == 0]
df_even = df_even.set_index(df_even.index.values - 1)
df_odd.add(df_even, fill_value = 0)结果:
pos k y
123 1.1 0.6
125 0.7 0.3
127 0.3 0.6
129 0.4 0.9
131 0.3 0.2https://stackoverflow.com/questions/35176293
复制相似问题