我有以下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))]
答案 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