У меня есть следующий DataFrame:
Item Weight Bags Must quantity must quantity bags str len assigned bag
0 planes bag 8.50 planes,pods True 1 1 6 NaN
1 Full Bandolera 3.76 planes True 1 2 6 NaN
2 tail 0.30 planes False 3 2 6 NaN
3 central wing 1.08 planes False 3 2 6 NaN
4 engine 0.44 planes False 3 2 6 NaN
5 height steer 0.12 planes,pods False 3 2 6 NaN
6 dihedral 0.40 planes False 3 2 6 NaN
7 pods bag 8.72 pods,ground sys... True 1 1 4 NaN
8 Pod 1.74 pods True 3 2 4 NaN
9 optic 0.86 pods True 2 2 4 NaN
10 thermal 1.20 ground system bag True 3 2 4 NaN
Я хочу заполнить столбец назначенной сумки именем сумки, если эта сумка находится в столбце Сумки.
Но я хочу только заполните назначенную сумку следующей пустой строки, потому что с каждым назначенным элементом мне нужно проверить некоторые другие условия.
До сих пор я пробовал следующее:
BAGS_NAMES = ['planes bag', 'pods bag', 'ground system bag', 'low bag', 'mefaked low']
@classmethod
def assign_items_to_bags(cls):
cls.df[DfConsts.ASSIGNED_BAG] = [bag in BAGS_NAMES for bag in cls.df[DfConsts.BAGS].values.tolist()]
return cls.df
или это:
@classmethod
def assign_items_to_bags(cls):
cls.df[DfConsts.ASSIGNED_BAG] = cls.df[cls.df[DfConsts.BAGS].isin(BAGS_NAMES)]
return cls.df
это тоже, что создает другую проблему, потому что это не меняет сделанный выбор.
@classmethod
def assign_items_to_bags(cls):
try:
selected_bag = random.choice(BAGS_NAMES)
cls.df[DfConsts.ASSIGNED_BAG] = cls.df.loc[
cls.df[DfConsts.BAGS].str.contains(
selected_bag)] == selected_bag
Мне нужно что-то подобное.
@classmethod
def assign_items_to_bags(cls):
for item in BAGS_NAMES:
# how to check only the first NaN row?
if cls.df[DfConsts.BAGS].str.contains(item):
cls.df[DfConsts.ASSIGNED_BAG] = item
# try next item in BAGS_NAMES