Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据透视表:按特定字符串的计数聚合函数_Python_Pandas_Lambda_Pivot Table_Aggregate Functions - Fatal编程技术网

Python 数据透视表:按特定字符串的计数聚合函数

Python 数据透视表:按特定字符串的计数聚合函数,python,pandas,lambda,pivot-table,aggregate-functions,Python,Pandas,Lambda,Pivot Table,Aggregate Functions,我试图分析一个数据框架,其中包含日期作为索引,名称和消息作为列 head()返回: 这是我试图取消初始df的透视表,其中aggfunc是单词存在的计数(例如image) 理想情况下,作为一个示例,: Name Tom Michael James Date 2020-01-01 1 1 0 2020-01-02 0 0 3 例如,我

我试图分析一个数据框架,其中包含日期作为索引,名称和消息作为列

head()返回:

这是我试图取消初始df的透视表,其中aggfunc是单词存在的计数(例如image)

理想情况下,作为一个示例,

 Name        Tom    Michael   James
 Date                                   
 2020-01-01    1       1        0
 2020-01-02    0       0        3
例如,我使用

df_m = df.pivot_table(values='Message',index='Date',columns='Name',aggfunc=lambda x: len(x.unique()))
它根据一天中的消息数进行聚合,并返回表fine

提前感谢

使用添加到DataFrame中的新列的匹配值数量,然后使用求和进行旋转:

df_m = (df.reset_index()
          .assign(count= df['Message'].str.count('image'))
          .pivot_table(index='Date', 
                       columns='Name', 
                       values='count' ,
                       aggfunc='sum', 
                       fill_value=0))
print (df_m)
Name        James  Michael  Tom
Date                           
2020-01-01      0        1    1
2020-01-02      3        0    0

这是为了好玩,也是同一答案的另一种选择。这只是熊猫提供的不同选择的一个游戏:

      #or df1.groupby(['Date','Name']) if the index has a name
res = (df1.groupby([df1.index,df1.Name])
          .Message.agg(','.join)
          .str.count('image')
          .unstack(fill_value=0)
      )

res

Name      James   Michael   Tom ‎
Date            
2020-01-01  0       1        1
2020-01-02  3      0         0

如果你不介意的话,2020-01-02在原始df的哪里?似乎找不到it@sammywemmy-您是对的,因此编辑了有问题的样本以进行匹配。
df_m = (df.reset_index()
          .assign(count= df['Message'].str.count('image'))
          .pivot_table(index='Date', 
                       columns='Name', 
                       values='count' ,
                       aggfunc='sum', 
                       fill_value=0))
print (df_m)
Name        James  Michael  Tom
Date                           
2020-01-01      0        1    1
2020-01-02      3        0    0
      #or df1.groupby(['Date','Name']) if the index has a name
res = (df1.groupby([df1.index,df1.Name])
          .Message.agg(','.join)
          .str.count('image')
          .unstack(fill_value=0)
      )

res

Name      James   Michael   Tom ‎
Date            
2020-01-01  0       1        1
2020-01-02  3      0         0