熊猫,根据条件用字典键填充值

时间:2020-04-02 12:58:26

标签: python pandas dataframe

我有以下DataFrame:

            Item  Weight  Bags    Must  quantity  must quantity  bags column length   assigned bag
0     planes bag    8.50  planes   v       1              1          6                  None
1  Full Bandolera   3.76  planes   v       3              2          6                  None
2  tail             0.30  planes   0       3              2          6                  None
3  central wing     1.08  planes   0       3              2          6                  None
4  engine           0.44  planes   0       3              2          6                  None
5  height steer     0.12  planes   0       3              2          6                  None
6  dihedral         0.40  planes   0       3              2          6                  None   
7  pods bag         8.72  pods     v       1              1          4                  None
8  Pod              1.74  pods     v       3              2          4                  None
9  optic            0.86  pods     v       2              2          4                  None

我需要通过以下dict的键为分配的包分配一个字符串:


bags = {'planes bag': 6,
        'pods bag': 4,
        'ground system bag': 13}

到目前为止,我有一个函数可以过滤出满足我条件的行以填充:

bags_lens = list(bags.values())
        df['assigned bag'] =  df[(df['Must'] != 0) & (df['bags column length'].isin(bags_lens))]
        print(df)

此功能检查是否必须检查,以及袋的长度是否与袋命令中的任何值相符。

如果某行同时符合这两个条件,则需要将其分配给指定的bag列。

举例来说,行飞机袋和完整的Bandolera应该指定单词“飞机袋” 到指定的袋子列。

澄清我想要的结果。 如果可能的话,我会这样:

df['assigned bag'] =df['Bags'] if df[(df['Must'] != 0) & (df['bags column length'].isin(bags_lens))]

1 个答案:

答案 0 :(得分:0)

您实际上要尝试的是.map() bags column length到这本字典:

bags_inv = {
    6: 'planes bag',
    4: 'pods bag',
    13: 'ground system bag'
}

但是,仅在Must不包含'0'(字符串!)的情况下:

df['assigned_bag'] = df.loc[df['Must'] != '0']['bags column length'].map(bags_inv)
0    planes_bag
1    planes_bag
7      pods_bag
8      pods_bag
9      pods_bag
Name: bags_column_length, dtype: object