Сравните относительные даты начала в пандах - PullRequest
1 голос
/ 29 октября 2019

Я хотел бы создать таблицу относительных дат начала, используя выходные данные сводной таблицы Pandas. Столбцы сводной таблицы - месяцы, строки - счета, а ячейки - промежуточный итог действий. Например:

Date1     Date2     Date3     Date4
1         1             2         3
N/A       1             2         2

Первый экземпляр первой строки - Date1. Первый экземпляр второй строки - Date2.

Новая таблица будет отформатирована таким образом, что столбцы будут теперь месяцами относительно первого действия и будут выглядеть следующим образом:

FirstMonth     SecondMonth     ThirdMonth
1                 1             2
1                 2             2

Создание исходногоСводная таблица в пандах проста, мне любопытно, есть ли какие-либо предложения по разработке таблицы относительных начальных точек. Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Хитрость заключается в использовании .apply () в сочетании с dropna ().

df.T.apply(lambda x: pd.Series(x.dropna().values)).T
0 голосов
/ 29 октября 2019

Во-первых, убедитесь, что ваши столбцы данных представляют собой фактические значения даты и времени. Затем вы можете выполнить следующее, чтобы вычислить сумму действий для каждой даты, а затем сгруппировать эти значения по месяцам и рассчитать соответствующую месячную сумму:

>>>df

2019-01-01  2019-01-02  2019-02-01
Row
0             4          22          40
1            22          67          86
2            72          27          25
3             0          26          60
4            44          62          32
5            73          86          81
6            81          17          58
7            88          29          21
>>>df.sum().groupby(df.sum().index.month).sum()

1    720
2    403

И если вы хотите, чтобы она отражала то, что выимел выше:

>>> out = df.sum().groupby(df.sum().index.month).sum().to_frame().T
>>> out.columns = [datetime.datetime.strftime(datetime.datetime.strptime(str(x),'%m'),'%B') for x in out.columns]
>>> out
   January  February
0      720      403

И если я вас неправильно понял, и вы хотите, чтобы это было разбито по записи / строке:

>>> df.T.groupby(df.T.index.month).sum().T
1   2
Row
0     26  40
1     89  86
2     99  25
3     26  60
4    106  32
5    159  81
6     98  58
7    117  21

Переименуйте столбцы, как указано выше.

...