Pandas:Python如何使用重复索引进行Groupby索引

时间:2014-10-25 06:22:03

标签: python pandas

我有一个类似于此的DataFrame:

list1 = [4656, 5455, 4545, 6992, 4233, 4596, 4699, 4899, 7896, 4526, 4872, 6952]
list2 = [4466, 4899, 4554, 4771, 1477, 1445, 4523, 1456, 3695, 6258, 1452, 4878]
index1= ['A50_C1','A50_C2','A50_I1','A50_I2','A50_N1','A50_N2','A60_C1','A60_C2','A60_I1','A60_I2','A60_N1','A60_N2']
s1 = pd.Series(list1, index=index1, name='list1')
s2 = pd.Series(list2, index=index1, name='list2')
pd.concat([s1, s2], axis=1)

这是它的样子:

         list1    list2
test
A50_C1    4656    4466
A50_C2    5455    4899
A50_I1    4545    4554   
A50_I2    6992    4771
A50_N1    4233    1477
A50_N2    4596    1445
A60_C1    4699    4523
A60_C2    4899    1456
A60_I1    7896    3695
A60_I2    4526    6258
A60_N1    4872    1452
A60_N2    6952    4878

我想与索引(测试列)进行分组 因为我正在使用: df2 = df1.groupby(df1.index) 它似乎有效,但它将同一行分组(可能创建不同的组合可能)。

所以我无法弄清楚如何在索引中组合重复,即:C1-C2; I1-I2; N1-N2

结果应如下所示:

          list1    list2
test
A50_C1    4656    4466
A50_C2    5455    4899

          list1    list2
test
A50_I1    4545    4554   
A50_I2    6992    4771

          list1    list2
test
A50_N1    4233    1477
A50_N2    4596    1445

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

最好的方法是在DataFrame中添加一列,其中包含您要分组的信息。索引中的每个值只是一个字符串;大熊猫无法猜测你要分组的部分,所以你需要明确地提取与你的分组相关的部分。

根据您的示例,看起来您实际想要分组的是索引的内容,不包括最后一个字符。所以把它作为一个列:

df['label'] = df.index.to_series().str[:-1]

现在,您可以df.groupby('label')对所需功能进行分组。