Pandas, заполнить значения с помощью клавиш dict на основе условия - PullRequest
2 голосов
/ 02 апреля 2020

У меня есть следующий 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)

Эта функция проверяет, проверена ли необходимость, и соответствует ли длина пакетов сумм любому из значений в сумках dict.

если строка соответствует обоим условиям, мне нужно, чтобы она была назначена столбцу назначенного мешка.

Имеется в виду, например, мешок с рядами плоскостей и полный Bandolera должен назначить слово «мешок с плоскостями» назначенному столбцу пакета.

Чтобы уточнить мой желаемый результат. Если бы это было возможно, я бы что-то вроде этого:

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

1 Ответ

1 голос
/ 02 апреля 2020

Что вы на самом деле пытаетесь сделать, это .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...