Numpy где выполняют несколько действий - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть два столбца данных, в которых я хочу проверить, находится ли элемент одного внутри другого. Я выполняю это, используя метод pandas isin. Однако, если элемент присутствует во втором кадре данных, я также хочу вычесть из обоих:

attivo['S'] = np.where(attivo['SKU'].isin(stampate['SKU-S']), attivo['S'] - 1, attivo['S'])

В этом примере, если элемент в столбце S из attivo dataframe присутствует в столбце SKU-S stampate dataframe, столбец S уменьшится на одну единицу, однако я также хочу, чтобы тот же столбец S уменьшился в stampate dataframe .

Как этого добиться?

РЕДАКТИРОВАТЬ с образцами данных:

df1 = pd.DataFrame({'SKU': 'productSKU', 'S': 5}, index=[0])

df2 = pd.DataFrame({'SKU-S': 'productSKU', 'S': 5}, index=[0])

В настоящее время я достигаю этого:

df1['S'] = np.where(df1['SKU'].isin(df2['SKU-S']), df1['S'] - 1, df1['S'])

enter image description here

Однако мне бы хотелось, чтобы оба кадра данных были обновлены, в этом В этом случае они оба отобразят 4 в столбце S.

1 Ответ

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

IIU C:

s = df1['SKU'].isin(df2['SKU-S'])

# modify df1
df1['S'] -= s

# count the SKU in df1 that belongs to df2 by values
counts = df1['SKU'].where(s).value_counts()

# modify df2
df2['S'] -= df2['SKU-S'].map(counts).fillna(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...