我知道问题名称有点含糊。
我的目标是根据我的数据框中的2列+唯一值来分配全局键列。
例如
CountryCode | Accident
AFG Car
AFG Bike
AFG Car
AFG Plane
USA Car
USA Bike
UK Car
假设汽车= 01,自行车= 02,飞机= 03
我想要的全局密钥格式是[Accident] [CountryCode] [UniqueValue]
唯一值是类似[Accident] [CountryCode]的计数
因此,如果“事故=汽车”和“国家/地区代码= AFG”是第一次发生,则全局密钥为01AFG01
所需的数据帧如下所示:
CountryCode | Accident | GlobalKey
AFG Car 01AFG01
AFG Bike 02AFG01
AFG Car 01AFG02
AFG Plane 01AFG03
USA Car 01USA01
USA Bike 01USA02
UK Car 01UK01
我尝试运行一个for循环将事故编号和CountryCode一起附加
例如:
globalKey = []
for x in range(0,6):
string = df.iloc[x, 1]
string2 = df.iloc[x, 2]
if string2 == 'Car':
number = '01'
elif string2 == 'Bike':
number = '02'
elif string2 == 'Plane':
number = '03'
#Concat the number of accident and Country Code
subKey = number + string
#Append to the list
globalKey.append(subKey)
这段代码将根据我分配的值为我提供
01AFG
,02AFG
之类的东西。但是我想通过计算CountryCode
和Accident
相似时的出现次数来分配唯一值。我坚持上面的代码。我认为应该在Pandas中使用map函数有更好的方法。
感谢您的帮助!
非常感谢!
最佳答案
您可以尝试通过cumcount
分多个步骤来实现,例如:
In [1]: df = pd.DataFrame({'Country':['AFG','AFG','AFG','AFG','USA','USA','UK'], 'Accident':['Car','Bike','Car','Plane','Car','Bike','Car']})
In [2]: df
Out[2]:
Accident Country
0 Car AFG
1 Bike AFG
2 Car AFG
3 Plane AFG
4 Car USA
5 Bike USA
6 Car UK
## Create a column to keep incremental values for `Country`
In [3]: df['cumcount'] = df.groupby('Country').cumcount()
In [4]: df
Out[4]:
Accident Country cumcount
0 Car AFG 0
1 Bike AFG 1
2 Car AFG 2
3 Plane AFG 3
4 Car USA 0
5 Bike USA 1
6 Car UK 0
## Create a column to keep incremental values for combination of `Country`,`Accident`
In [5]: df['cumcount_type'] = df.groupby(['Country','Accident']).cumcount()
In [6]: df
Out[6]:
Accident Country cumcount cumcount_type
0 Car AFG 0 0
1 Bike AFG 1 0
2 Car AFG 2 1
3 Plane AFG 3 0
4 Car USA 0 0
5 Bike USA 1 0
6 Car UK 0 0
从那时起,您可以将
cumcount
,cumcount_type
和Country
的值连接起来以实现所追求的目标。也许您想将
1
添加到不同计数下的每个值中,具体取决于您要从0还是1开始计数。我希望这有帮助。
关于python - 根据不同的列值分配唯一值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39589558/