Как сгруппировать, сортировать и помещать данные строк также в новые столбцы в Pandas Python

В Windows с использованием Win32 API Структура SYSTEMTIME даст вам миллисекунды. Затем вы должны использовать Time Functions , чтобы получить время. Например:

#include 

int main()
{
    SYSTEMTIME stime;
    //structure to store system time (in usual time format)
    FILETIME ltime;
    //structure to store local time (local time in 64 bits)
    FILETIME ftTimeStamp;
    char TimeStamp[256];//to store TimeStamp information
    GetSystemTimeAsFileTime(&ftTimeStamp); //Gets the current system time

    FileTimeToLocalFileTime (&ftTimeStamp,<ime);//convert in local time and store in ltime
    FileTimeToSystemTime(<ime,&stime);//convert in system time and store in stime

    sprintf(TimeStamp, "%d:%d:%d:%d, %d.%d.%d",stime.wHour,stime.wMinute,stime.wSecond, 
            stime.wMilliseconds, stime.wDay,stime.wMonth,stime.wYear);

    printf(TimeStamp);

    return 0;
} 

0
задан john doe 17 January 2019 в 16:08
поделиться

2 ответа

Таким же образом вы получили maxdata и mindata, вы можете получить nth минимумов и максимумов, выполнив:

df.sort_values(['id1','id2','c1']).groupby(['id1','id2']).c1.nth(1)

      id1  id2
1    a1      6
2    b1     23
Name: c1, dtype: int64

Так что в этом случае вы получите второй минимум. для c1

Где df.sort_values(['id1','id2','c1']) будет сортировать значения по id1, id2 и c1 соответственно, что эквивалентно группированию по id1 и id2 и сортировке c1: [ 1114]

   id1 id2   c1   c2
0    1  a1    5    3
1    1  a1    6    2
2    1  a1    9    4
5    1  a1   34   32
3    2  b1    5    2
4    2  b1   23   43
6    3  3a  234  435
0
ответ дан yatu 17 January 2019 в 16:08
поделиться

Давайте попробуем это:

smax = lambda x: x[x.rank(ascending = False) == 2]
smax.__name__ = 'secondMax'

tmax = lambda x: x[x.rank(ascending = False) == 3]
tmax.__name__ = 'thirdMax'

df_out = df.groupby(['id1','id2']).agg(['max','min',smax, tmax])
df_out.columns = [f'{i}_{j}' for i,j in df_out.columns]
df_out = df.merge(df_out, on=['id1','id2'])
df_out = df_out.where(df_out.astype(bool))
df_out

Вывод:

   id1 id2   c1   c2  c1_max  c1_min c1_secondMax c1_thirdMax  c2_max  c2_min c2_secondMax c2_thirdMax
0    1  a1    5    3      34       5            9           6      32       2            4           3
1    1  a1    6    2      34       5            9           6      32       2            4           3
2    1  a1    9    4      34       5            9           6      32       2            4           3
3    1  a1   34   32      34       5            9           6      32       2            4           3
4    2  b1    5    2      23       5            5         NaN      43       2            2         NaN
5    2  b1   23   43      23       5            5         NaN      43       2            2         NaN
6    3  3a  234  435     234     234          NaN         NaN     435     435          NaN         NaN
0
ответ дан Scott Boston 17 January 2019 в 16:08
поделиться
Другие вопросы по тегам:

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