Python 3.x 大熊猫新发生计数
如何为唯一的列组合指定唯一的编号,因为每个新的组合编号必须增加1Python 3.x 大熊猫新发生计数,python-3.x,pandas,Python 3.x,Pandas,如何为唯一的列组合指定唯一的编号,因为每个新的组合编号必须增加1 样本输入 import pandas as pd import numpy as np df=pd.DataFrame({'A':['A','A','A','B','B','B','B'], 'B':['a','a','b','a','a','a','a'], }) df A B 0 A a 1 A a 2 A b 3
样本输入
import pandas as pd
import numpy as np
df=pd.DataFrame({'A':['A','A','A','B','B','B','B'],
'B':['a','a','b','a','a','a','a'],
})
df
A B
0 A a
1 A a
2 A b
3 B a
4 B a
5 B a
6 B a
期望输出
新列“C”,通过对列“A”和“B”的值分组进行计数。
如下
使用
输出
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
输出:
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 4
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
注意:这也适用于两个或多个连续的重复组:
df=pd.DataFrame({'A':['A','A','A','B','B','B','B','C','C','B'],
'B':['a','a','b','a','a','a','a','b','b','a']})
df.loc[df.drop_duplicates().index, 'C'] = 1
df['C'] = df['C'].fillna(0).cumsum().astype(int)
df
输出:
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 4
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
注2:上述情况下,ngroup
方法不会产生递增的“C”值,请参见最后一行值(3)与前一行(4):
输出:
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 4
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
更新:
类似于n组
,但从第一次出现开始计数:
df=pd.DataFrame({'A':['A','A','A','B','B','B','B','C','C','B'],
'B':['a','a','b','a','a','a','a','b','b','a']})
z = df.drop_duplicates().reset_index(drop=True)
z['C'] = np.arange(len(z)) + 1
df = df.merge(z, how='left')
df
输出:
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 4
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
A B C
0 A a 1
1 A a 1
2 A b 2
3 B a 3
4 B a 3
5 B a 3
6 B a 3
7 C b 4
8 C b 4
9 B a 3
是的,很好。但这会将组分解成因数,因此任何在后面到达的相同组都将具有相同的值,但不知道OP想要什么。:)是的,我是根据那个OP来算的。。“新列‘C’通过将列‘A’和‘B’的值分组进行计数。如下所示”我认为这一列也有问题,请参阅我回答“如何为唯一列组合提供唯一编号”中的“注2”@perl这就是为什么八行具有相同的值的原因之一,因为它不是唯一的组合。好吧,是的,也许问题中存在一些歧义,让我们看看:)谢谢perl。关于索引9,它必须与C列的值3一致。所以它的正确性很酷,是的,然后,
n分组
是从字母表的升序开始计数的方法,是否可以避免,要求计数必须从第一行开始。请参阅我答案的“更新”部分