Python 如何合并列表?(数据帧)

Python 如何合并列表?(数据帧),python,pandas,dataframe,pivot,crosstab,Python,Pandas,Dataframe,Pivot,Crosstab,我有三个不同的列表,分别命名为:“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

我有三个不同的列表,分别命名为:“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]

从它们开始,我尝试使用pandas,python将它们合并到一个数据帧中

为此,我必须在整个范围内(2018-07~2020.03)按日期计算月份。 例如: 如果在neu_date_数据中2019-05的总日期数是15,我想在表中显示为整数

我尝试了以下代码:

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
我想用3种方式修复代码:

  • 合并3个列表并显示一次

  • 将整个“年”和“月”数据设置为

  • 对于3行,每行的标题为“pos”、“neu”、“neg”,而非年份


  • 首先将日期时间转换为月份期间,然后使用,最后一起使用:

    我认为对于绘图来说,最好是在行中使用月周期,在列中使用类型:

    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()
    

    首先将日期时间转换为月份期间,然后使用,最后一起使用:

    我认为对于绘图来说,最好是在行中使用月周期,在列中使用类型:

    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()