我正在尝试创建一个计数,在运行下一个ID时将区域替换为一行。我希望每个ID都有一个结果。
尝试了几种方法,但似乎都不起作用,缺乏想法。
数据集
| 识别号|区域|
| - ------|- ------|
| 1个|北|
| 1个|南部|
| 1个|东|
| 1个|西|
| 第二章|北|
| 第二章|南部|
| 第二章|东|
| 第二章|西|
| 三个|北|
| 三个|南部|
| 三个|东|
| 三个|西|
| 四个|北|
| 四个|南部|
| 四个|东|
| 四个|西|
| 五个|西北|
| 五个|西南|
| 六个|西北|
| 六个|西南|
预期输出
| 识别号|区域|
| - ------|- ------|
| 1个|北|
| 第二章|南部|
| 三个|东|
| 四个|西|
| 五个|西北|
| 六个|西南|
6条答案
按热度按时间zf9nrax11#
您可以对两列都执行
factorize
操作,并保留秩相等的行:输出:
另一个想法是,使用一个中间的矩形矩阵并取其对角线呢?
输出:
中间矩形矩阵:
8fq7wneg2#
我认为方法“.drop_duplicates”可能会解决您的问题。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html
我认为您应该使用“subset”参数,如上述链接的文档中所示。
jhdbpxl93#
可以将唯一的区域名称收集到一个集合中,然后对于每个组(按
ID
分组)提取下一个可用区域:yvt65v4c4#
下面是一个可能的解决方案。它确实会为您给出的示例产生所需的输出,但不一定会泛化到ID值的任何组合或Regions的组合。如果您正在寻找不需要设置循环的Pandas方法,它可能会很有用。
hs1rzwqc5#
一个可能的解决方案
x759pob26#
使用
groupby.ngroup
和drop_duplicates
的另一个想法是: