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