如何根据条件向dataframe添加数据?

2024-05-13 08:58:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中包含特定公司的员工数据。数据框架有五列(EMP_ID、国家、功能区、专业、性别)

我还有一个csv,它定义了整个数据集的子组。例如:

  • 第1组:国家=加拿大和;功能区=珠三角
  • 第2组:国家=法国
  • 第三组:国家=法国;功能面积=FS
  • 第4组:国家=法国;功能区=FS&;性别=女性

等等,等等。正如您所看到的,每个员工可以属于多个子组,并且大多数情况下都会属于多个子组。我需要做的是将这些定义的子组添加到原始数据帧中

我能够在Jupyter笔记本中创建一个解决方案,但现在我正在将该代码转换为python脚本,并寻找一种更优雅的方法

我最初的方法是定义一个函数,该函数包含将子组分配给特定记录(行)的逻辑。我在下面包含了这个函数的一段代码

然后我将使用df.apply方法将该函数应用于数据帧中的每一行。对于每一行,函数都会创建一个列表来保存它所属的所有子组,检查记录所属的子组,并将该子组追加到列表中。然后,df.apply方法将该列表添加到名为GROUPS的新列中的记录中

结果是原始数据框中有一个新列(组),其中包含每个记录的列表,并在该列表中显示该记录所属的子组

对于这个数据帧,我使用一个MultiLabelBinarizer对这个信息进行热编码,并将数据帧转换为每个子组有一个列,每个子组包含一个二进制记录值

def assign_groups(row):
    # Define a group list that will contain the groups each record belongs to 
    group_list = []     

    if row.COUNTRY == 'Canada':
        if row.FUNCTIONAL_AREA == 'PRD':
            group_list.append(1)

    if row.COUNTRY == 'France':
        if row.FUNCTIONAL_AREA == 'FS':
            if row.GENDER == 'Female':
                group_list.append(4)
            group_list.append(3)
        group_list.append(2)
df['GROUPS'] = df.apply(assign_groups, axis=1)
mlb = MultiLabelBinarizer()
df = df.join(pd.DataFrame(mlb.fit_transform(df.pop('GROUPS')),
                          columns=['GROUP_'+str(x) for x in mlb.classes_],
                          index=df.index))

我想要的是一个更优雅的解决方案,即硬编码一组if语句。这些子组定义将在将来更改,并将添加新的子组。我正在努力想一个更好的方法来解决这个问题,并欢迎任何建议


Tags: 数据方法函数df列表if定义记录