Предполагая, что ваш фрейм данных выглядит так ( я добавил 2 дополнительные строки внизу, так как в вашем примере не было ничего, чтобы воспроизвести остальную часть кода ):
Terminal_ID TSG Date Terminal_no Vol
0 t_tel_003 CashCheck 2018-01-10 3 61
1 t_tel_003 CashCheck 2018-01-10 3 3
2 t_tel_003 CommercialDeposit 2018-01-10 3 12
3 t_tel_003 CommercialDeposit 2018-01-10 3 10
4 t_tel_003 CommercialDeposit 2018-01-10 3 122
5 t_tel_003 CommercialDeposit 2018-01-10 3 1
6 t_tel_004 CommercialDeposit 2018-01-10 3 1
7 t_tel_003 CommercialDeposit 2018-01-10 4 1
Когда вы видим, что последние 2 строки совершенно разные и не имеют соответствия, учитывая все 4 столбца (следовательно, выходные данные должны иметь эти 2 строки такими, какие они есть):
Используя ниже:
df_dup = df.groupby([df.index//2,'Terminal_ID','TSG','Date','Terminal_no'])[df.columns].apply(lambda x : x[x[x.columns[:-1]].duplicated(keep=False)]['Vol'].sum()).reset_index().rename(columns={0:'Vol'}).drop('level_0',axis=1).replace(0,np.nan).dropna()
df_uniq =df[~df[df.columns[:-1]].duplicated(keep=False)]
pd.concat([df_dup,df_uniq],ignore_index=True)
[1112 ] Вывести
Terminal_ID TSG Date Terminal_no Vol
0 t_tel_003 CashCheck 2018-01-10 3 64.0
1 t_tel_003 CommercialDeposit 2018-01-10 3 22.0
2 t_tel_003 CommercialDeposit 2018-01-10 3 123.0
3 t_tel_004 CommercialDeposit 2018-01-10 3 1.0
4 t_tel_003 CommercialDeposit 2018-01-10 4 1.0
Объяснение df_dup
Группировать каждые 2 строки, используя df.index//2
в группе, затем применять функцию к каждой группе, которая проверяет, является ли каждая группа (в данном случае 2 строки, исключая последний столбец Vol
) одинаковой, а затем вносит сумму в столбец Vol
.
df_uniq
: отфильтровать полностью уникальные значения. Наконец, объедините оба, чтобы получить желаемый результат.
MongoDb - это тот, который использует двоичный формат хранения JSON. Я не знаю, есть ли другой, ориентированный на документы. Большинство других являются хранилищами значений ключей и могут извлекать объект только на основе одного ключа.
Взгляните на Риак Башо. Он имеет несколько общих черт с CouchDB: на основе Erlang, Javascript MapReduce API, HTTP-транспорт, формат документов JSON и репликация с несколькими хозяевами. Он не стремится быть таким простым, как CouchDB (CouchDB более «самоуверенный»), но он дает вам множество возможностей для настройки параметров CAP в соответствии с потребностями вашего приложения для каждой записи.
Persevere - еще одна БД, загружаемая с помощью JSON:
Первичный транспорт - это JSON HTTP / REST
Данные хранятся как JSON
Он имеет собственный клиент JS / JSON для запуска непосредственно из браузера.
Если вам нужна схема, она определяется с помощью JSON