Мои извинения за длину этого, но я хочу объяснить как можно более полно. Я полностью озадачен тем, как решить эту проблему.
Настройка:
У меня есть два фрейма данных, первый содержит список всех возможных значений в первом столбце, в этом столбце нет повторяющихся значений , Давайте назовем это df_01. Тезисы - это все общие возможные значения в каждом списке. Все дополнительные столбцы представляют собой независимые списки. Каждый из них содержит число, которое показывает, сколько дней любое данное значение всех возможных значений было в этом списке. Этот кадр данных (df_01) имеет форму (9277, 32). Эти размеры могут измениться, но в целом останутся прежними. Ниже приведен небольшой пример того, как это выглядит.
df_01 перед любыми действиями:
index values list01 list02 ... list30 list31
0 aaa 5 1 ... NaN 83
1 bbb NaN NaN ... NaN 4
2 ccc 20 NaN ... NaN 32
3 ddd 1 27 ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
9274 qqq NaN 15 ... NaN 6
9275 rrr 238 NaN ... NaN 102
9276 sss 3 2 ... NaN NaN
9277 ttt 12 NaN ... NaN 99
Этот первый кадр данных (df_01) всегда будет значениями, которые были в предыдущий день.
Второй кадр данных. Давайте назовем это df_2 всегда будет иметь меньше строк и будет меняться изо дня в день по длине, но всегда будет иметь такое же количество столбцов, как (df_01). В настоящее время он имеет форму (1351, 32). В этом кадре данных (df_2) первый столбец имеет все общие значения из каждого списка на сегодняшний день и не имеет дубликатов. Другие столбцы в этом фрейме данных (df_2) имеют 1, если значение находится в списке сегодня, и NaN, если его нет. Вот пример.
df_02 перед любыми действиями:
index values list01 list02 ... list30 list31
0 aaa 1 1 ... NaN 1
1 bbb NaN 1 ... 1 1
2 ddd 1 1 ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
1349 qqq NaN NaN ... 1 1
1350 rrr 1 NaN ... 1 NaN
1351 sss NaN 1 ... NaN 1
Вопрос:
Что я хочу сделать sh заключается в следующем.
1) Для каждого значения в каждом столбце, если значение существует в первом кадре данных (df_01), а не во втором (df_02), его счетчик в (df_01) будет сбрасываться в NaN для каждого столбца.
2) Затем для каждого значения в каждом столбце второго кадра данных (df_02), если значение существует в одном и том же столбце на обоих кадрах данных, суммируйте значения.
3) Если aaa в list01 of (df_01) = 5 и aaa в list01 of (df_2) = 1, тогда aaa в list01 of (df_02) станет равным 6. Это сохранит текущий счет.
4) Если значение равно NaN, в обоих случаях никаких действий не требуется.
5) Если значение равно NaN (df_01) и 1 (df_02), оно остается равным 1.
*** Значение в df_02 всегда будет 1 или NaN до суммирования. Это двоичный выбор того, находится ли значение в столбце значений в отдельном списке в тот день или нет.
*** Обратите внимание на значение ccc, и ttt находятся в (df_01), поскольку они являются возможными значениями, но не (df_02), поскольку они не были ни в одном из списков сегодня.
*** Звездочка вокруг значений, таких как *NaN*
или *6*
, обозначает, что значения, которые будут меняться, на самом деле не будут в данных.
Кадры данных должны выглядеть следующим образом после процедуры:
df_01
index values list01 list02 ... list30 list31
0 aaa 5 1 ... NaN 83
1 bbb NaN NaN ... NaN 4
2 ccc NaN NaN ... NaN NaN
3 ddd 1 27 ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
9274 qqq NaN *NaN* ... NaN 6
9275 rrr 238 NaN ... NaN *NaN*
9276 sss *NaN* 2 ... NaN 24
9277 ttt 12 NaN ... NaN 99
df_02
index values list01 list02 ... list30 list31
0 aaa *6* *2* ... NaN *84*
1 bbb NaN 1 ... 1 *5*
2 ddd *2* *28* ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
1349 qqq NaN NaN ... 1 *7*
1350 rrr *239* NaN ... 1 NaN
1351 sss NaN *3* ... NaN *25*
Как бы я go решил что-то подобное? Я даже не знаю с чего начать. Буду признателен за любые идеи, даже если они не будут полностью работать, просто чтобы указать мне правильное направление. Пожалуйста, дайте мне знать, если что-то нужно уточнить.
Спасибо