【发布时间】:2013-02-28 05:23:18
【问题描述】:
可以将新索引应用于DF,分别应用于groupby 的分组吗?准确地说 - 有没有一种优雅的方法可以做到这一点,并且可以通过 groupby 组更改原始 DF 吗?
更新: 我的数据如下所示:
A B C
0 a x 0.903343
1 a z 0.982050
2 g x 0.274823
3 g y 0.334491
4 c z 0.756728
5 f z 0.697841
6 d z 0.505845
7 b z 0.768199
8 b y 0.743012
9 e x 0.697212
我按列“A”和“B”分组,并且我希望该列的每对唯一值在原始 DF 中都具有相同的索引值。另外 - 原始 DF 可能很大,我试图弄清楚如何在不低效地形成全新 DF 的情况下制作这样的重新索引。
目前我正在使用这个解决方案:
df = pd.DataFrame({'A': [random.choice(ascii_lowercase[:5]) for _ in xrange(10)],
'B': [random.choice(['x', 'y']) for _ in xrange(10)],
'C': [random.random() for _ in xrange(10)]})
df['id'] = None
new_df = pd.DataFrame()
for i, (n, g) in enumerate(df.groupby(['A', 'B'])):
g['id'] = i
new_df = new_df.append(g)
new_df.set_index('id', inplace=True)
【问题讨论】:
-
如果您提供一些示例数据会很方便。
-
此外,您可以澄清一些歧义。您要修改组名吗?组内选定的行索引?如果您可以显示起始 df、groupby 以及您尝试完成的重新索引类型,那将会很有帮助。
-
如果我理解正确,您似乎正在尝试为 A 列和 B 列的每个组合创建一个具有唯一值的整数索引。除非您出于特定原因需要整数索引,否则您可以简单地创建使用带有
df.set_index(["A", "B"]).sort()的A 和B 列的MultiIndex,这将允许您使用xs和ix执行所有相同的选择和切片整数索引。示例:df.ix["a"].ix["y"]或df.xs(key="x", level=1)。