Pandas iterrows не может пропустить строку во время итерации, если выполнено условие

Вы можете использовать функции, предоставляемые средой хостинга, через javascript:

function httpGet(theUrl)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
    xmlHttp.send( null );
    return xmlHttp.responseText;
}

Однако синхронные запросы не рекомендуется, поэтому вы можете использовать это вместо:

function httpGetAsync(theUrl, callback)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
            callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous 
    xmlHttp.send(null);
}

Примечание. Начиная с Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), синхронные запросы в основном потоке устарели из-за негативных последствий для пользователя.

1
задан Vitor Valentim 16 January 2019 в 20:09
поделиться

1 ответ

Предполагая, что ваш фрейм данных выглядит так ( я добавил 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 : отфильтровать полностью уникальные значения. Наконец, объедините оба, чтобы получить желаемый результат.

1115 Надеюсь, это поможет. Дайте мне знать, если нет.

0
ответ дан anky_91 16 January 2019 в 20:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: