2014-10-02 52 views
1

我想拆分DataFrame的行索引字符串并且合计等于切片的行。喜欢的东西:pandas:拆分索引字符串和总结相同行的行

idx  val1 val2 val3 
con-991-1 1 1 1 
con-991-2 1 0 1 
con-732 0 0 0 
con-55-1 1 0 1 
con-55-2 0 1 1 

转到:

con-991 2 1 2 
con-732 0 0 0 
con-55 1 1 2 

这里去我到目前为止有:

df = DataFrame() 
df['new'] = df1.index 
df = DataFrame(df.new.str.split('-').tolist(), index=df1.index, columns=['pre', 'med', 'sux']) 
dfnew = concat([df1, df], axis=1, ignore_index=False) 
dfnew['index'] = dfnew.index 
dfnew.reset_index(level=0, inplace=True) 
#dfnew.index = MultiIndex.from_tuples(list(zip(dfnew['index'], dfnew[1])), names=['base1', 'base2'])   
print(dfnew.groupby(['index', 'med']).sum()) 

我的代码不工作,也绝对不是Python的。 有没有更好的方法来做到这一点? 最好。

回答

5

我不认为你的方法很遥远。首先,构建您想组一个新的系列,然后调用sum

>>> new_index = df.index.to_series().str.split("-").str[:2].str.join("-") 
>>> df.groupby(new_index).sum() 
     val1 val2 val3 
idx      
con-55  1  1  2 
con-732  0  0  0 
con-991  2  1  2 

也许

>>> df.groupby(new_index, as_index=False).sum() 
     idx val1 val2 val3 
0 con-55  1  1  2 
1 con-732  0  0  0 
2 con-991  2  1  2 

这可能有助于打破new_index下来。而不是添加了一系列新的框架,使我们可以访问str方法,我们可以简单地调用to_series

>>> df.index 
Index([u'con-991-1', u'con-991-2', u'con-732', u'con-55-1', u'con-55-2'], dtype='object') 
>>> df.index.to_series() 
idx 
con-991-1 con-991-1 
con-991-2 con-991-2 
con-732  con-732 
con-55-1  con-55-1 
con-55-2  con-55-2 
Name: idx, dtype: object 

,然后分裂,像你这样:

>>> df.index.to_series().str.split("-") 
idx 
con-991-1 [con, 991, 1] 
con-991-2 [con, 991, 2] 
con-732   [con, 732] 
con-55-1  [con, 55, 1] 
con-55-2  [con, 55, 2] 
Name: idx, dtype: object 

然后我们就可以使用切片取每个列表的前两个元素:

>>> df.index.to_series().str.split("-").str[:2] 
idx 
con-991-1 [con, 991] 
con-991-2 [con, 991] 
con-732  [con, 732] 
con-55-1  [con, 55] 
con-55-2  [con, 55] 
Name: idx, dtype: object 

最后,我们join

>>> df.index.to_series().str.split("-").str[:2].str.join("-") 
idx 
con-991-1 con-991 
con-991-2 con-991 
con-732  con-732 
con-55-1  con-55 
con-55-2  con-55 
Name: idx, dtype: object 
+0

非常好的方法,可以应用类似于我的问题。最佳! – Rockbar 2017-08-21 12:13:52