Python 熊猫:分割索引字符串并对相等切片的行求和

Python 熊猫:分割索引字符串并对相等切片的行求和,python,pandas,Python,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 到目前为止,我所掌握的情况

我想要分割数据帧的行索引字符串,并求等分片的行和。比如:

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())
我的代码不工作,也绝对不是pythonic。 有更好的方法吗?
最好的

我认为你的方法并不遥远。首先,构造一个要分组的新序列,然后调用
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

它可能有助于分解新的索引。我们不需要在框架中添加新的序列,这样我们就可以访问
str
方法,而只需调用
到\u 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
最后我们加入:

>>> 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