我知道问题名称有点含糊。

我的目标是根据我的数据框中的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)


这段代码将根据我分配的值为我提供01AFG02AFG之类的东西。但是我想通过计算CountryCodeAccident相似时的出现次数来分配唯一值。

我坚持上面的代码。我认为应该在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


从那时起,您可以将cumcountcumcount_typeCountry的值连接起来以实现所追求的目标。

也许您想将1添加到不同计数下的每个值中,具体取决于您要从0还是1开始计数。

我希望这有帮助。

关于python - 根据不同的列值分配唯一值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39589558/

10-12 16:50