2014-10-02 53 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