Python 数据透视表:按特定字符串的计数聚合函数
我试图分析一个数据框架,其中包含日期作为索引,名称和消息作为列 head()返回: 这是我试图取消初始df的透视表,其中aggfunc是单词存在的计数(例如image) 理想情况下,作为一个示例,: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 例如,我
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