как объединить списки? (pandas DataFrame) - PullRequest
1 голос
/ 14 февраля 2020

У меня есть 3 разных списка с именами: "pos_date_data", "neu_date_data", "neg_date_data". (каждое означает положительное, нейтральное и отрицательное)

они содержат значение даты и времени в форме информационного кадра.

ниже показано, как они выглядят при печати списка. и каждый из них имеет разную длину.

 datetime
0   2018-07-04
1   2018-07-04
2   2018-07-04
3   2018-07-04
4   2018-07-04
..         ...
212 2020-02-02
213 2020-02-02
214 2020-02-03
215 2020-02-04
216 2020-02-07

[217 rows x 1 columns]

    datetime
0    2018-07-04
1    2018-07-04
2    2018-07-04
3    2018-07-04
4    2018-07-04
...         ...
1527 2020-02-09
1528 2020-02-10
1529 2020-02-11
1530 2020-02-11
1531 2020-02-12

[1532 rows x 1 columns]

Из них я пытаюсь объединить их в один DataFrame, используя pandas, python.

для этого я должен посчитать месяцы по датам во всем диапазоне (2018-07 ~ 2020.03). например: если общее число дат 2019-05 года равно 15 в neu_date_data, я хочу отобразить его как целое число в таблице.

Я пробовал этот код:

df = pd.crosstab(neg_date_data['datetime'].dt.month.rename('m'),
                 neg_date_data['datetime'].dt.year.rename('y'))

и напечатано как: в форме кросс-таблицы, и каждый элемент обозначает количество дат в месяцах.

y   2018  2019  2020
m                   
1      0     1    17
2      0     0     2
3      0     1     0
4      0     3     0
5      0    12     0
6      0    13     0
7     25    16     0
8      0    36     0
9      0     2     0
10     1     8     0
11     1     5     0
12     2     4     0

Я хочу исправить код тремя способами:

  1. объединить 3 списка и отобразить их один раз.

  2. с полными данными за год и месяц в виде столбцов .

  3. для 3 строк , заголовки каждого списка: 'pos', 'neu', 'neg', а не годы.

1 Ответ

0 голосов
/ 14 февраля 2020

Сначала преобразуйте даты и месяцы в периоды Series.dt.to_period, а затем используйте Series.value_counts, последний concat вместе:

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

neg = neg_date_data['datetime'].dt.to_period('m').value_counts()
neu = neu_date_data['datetime'].dt.to_period('m').value_counts()

df = pd.concat([neg, neu], axis=1, keys=('neg','neu'))
print (df)
         neg  neu
2020-02    5    5
2018-07    5    5

df.plot()
...