Python 如何从数据帧中逗号分隔的值中的特定子字符串开始计算字符串的出现次数?

Python 如何从数据帧中逗号分隔的值中的特定子字符串开始计算字符串的出现次数?,python,pandas,dataframe,Python,Pandas,Dataframe,我是Python新手。我使用的数据帧(360000行和2列)如下所示: 营业日期 P01 2019-07-6 , 2018-06-05, 2019-07-06... P02 2016-03-6 , 2019-04-10 P03 2019-01-02 “日期”列的日期以逗号分隔,日期为2010-2019年。我试图只计算每个业务id的2019年每个月的日期。具体而言,我正在寻找输出: 有人能帮我吗?谢谢。如果它们还不是datetime对象,您可以先

我是Python新手。我使用的数据帧(360000行和2列)如下所示: 营业日期

P01         2019-07-6 , 2018-06-05, 2019-07-06...
P02         2016-03-6 , 2019-04-10
P03         2019-01-02
“日期”列的日期以逗号分隔,日期为2010-2019年。我试图只计算每个业务id的2019年每个月的日期。具体而言,我正在寻找输出:


有人能帮我吗?谢谢。

如果它们还不是datetime对象,您可以先将列(系列)转换为datetime:
pd.to\u datetime()
注意:
格式
参数

然后您可以通过
.dt

i、 e
df[df.COLUMN\u NAME.dt.month==5]

您可以执行以下操作

  • 首先使用
    str.split
    将每个单元格中的日期分隔为一个列表
  • 然后
    分解
    以展平列表
  • 使用
    pd转换为datetime。转换为\u datetime
    并提取月份
  • 最后使用
    pd.crosstab
    透视/计算月份并加入
  • 总共:

    s = pd.to_datetime(df['date'].str.split('\s*,\s*').explode()).dt.to_period('M')
    
    out = pd.crosstab(s.index,s )
    
    # this gives the expected output
    df.join(out)
    
    输出(
    out
    ):

    date   2016-03  2018-06  2019-01  2019-04  2019-07
    row_0                                             
    0            0        1        0        0        2
    1            1        0        0        1        0
    2            0        0        1        0        0