在原始 table 上使用 pandas 进行 groupby 后的自动增量索引
Autoincrement indexing after groupby with pandas on the original table
我无法解决 pandas 中非常 easy/simple 的问题。 :(
我有以下 table:
df = pd.DataFrame(data=dict(a=[1, 1, 1,2, 2, 3,1], b=["A", "A","B","A", "B", "A","A"]))
df
Out[96]:
a b
0 1 A
1 1 A
2 1 B
3 2 A
4 2 B
5 3 A
6 1 A
我想为每个分组(按 a 和 b 列分组)的唯一项目创建递增 ID。所以结果会像这样(c 列):
Out[98]:
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1
我试过:
df.groupby(["a", "b"]).nunique().cumsum().reset_index()
结果:
Out[105]:
a b c
0 1 A 1
1 1 B 2
2 2 A 3
3 2 B 4
4 3 A 5
不幸的是,这仅适用于按数据集分组的数据集,不适用于原始数据集。正如您在原始 table 中看到的那样,我有 7 行,按 returns 分组的只有 5.
所以有人可以帮助我如何获得所需的 table:
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1
提前致谢!
在从 (a, b)
列创建元组后使用 pd.factorize
:
df['c'] = pd.factorize(df[['a', 'b']].apply(tuple, axis=1))[0] + 1
print(df)
# Output
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1
groupby
+ ngroup
df['c'] = df.groupby(['a', 'b']).ngroup() + 1
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1
我无法解决 pandas 中非常 easy/simple 的问题。 :(
我有以下 table:
df = pd.DataFrame(data=dict(a=[1, 1, 1,2, 2, 3,1], b=["A", "A","B","A", "B", "A","A"]))
df
Out[96]:
a b
0 1 A
1 1 A
2 1 B
3 2 A
4 2 B
5 3 A
6 1 A
我想为每个分组(按 a 和 b 列分组)的唯一项目创建递增 ID。所以结果会像这样(c 列):
Out[98]:
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1
我试过:
df.groupby(["a", "b"]).nunique().cumsum().reset_index()
结果:
Out[105]:
a b c
0 1 A 1
1 1 B 2
2 2 A 3
3 2 B 4
4 3 A 5
不幸的是,这仅适用于按数据集分组的数据集,不适用于原始数据集。正如您在原始 table 中看到的那样,我有 7 行,按 returns 分组的只有 5.
所以有人可以帮助我如何获得所需的 table:
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1
提前致谢!
在从 (a, b)
列创建元组后使用 pd.factorize
:
df['c'] = pd.factorize(df[['a', 'b']].apply(tuple, axis=1))[0] + 1
print(df)
# Output
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1
groupby
+ ngroup
df['c'] = df.groupby(['a', 'b']).ngroup() + 1
a b c
0 1 A 1
1 1 A 1
2 1 B 2
3 2 A 3
4 2 B 4
5 3 A 5
6 1 A 1