Python3.9将数据透视帧保存为正确的csv

Python3.9将数据透视帧保存为正确的csv,python,pandas,dataframe,csv,pivot,Python,Pandas,Dataframe,Csv,Pivot,我有一个csv: Label,Visits,Actions,Maximum actions in one visit,Total time spent by visitors (in seconds),Bounces,Visits with Conversions,Unique visitors (daily sum),Users (daily sum),Metadata: segment,Metadata: referrer_type, cmpgn_group2, cmpgn_group3 S

我有一个csv:

Label,Visits,Actions,Maximum actions in one visit,Total time spent by visitors (in seconds),Bounces,Visits with Conversions,Unique visitors (daily sum),Users (daily sum),Metadata: segment,Metadata: referrer_type, cmpgn_group2, cmpgn_group3
Search Engines,4386,5836,15,351989,3547,0,4098,0,referrerType==search,2, name_1, 08-09
Campaigns,2618,3007,20,68609,2385,0,2579,0,referrerType==campaign,6, name_1, 08-09
Direct Entry,2266,3056,21,211456,1833,0,1943,0,referrerType==direct,1, name_1, 08-09
Websites,1097,2002,15,149385,722,0,987,0,referrerType==website,3, name_1, 08-09
Social Networks,691,787,8,18003,623,0,655,0,referrerType==social,7, name_1, 08-09
Search Engines,4045,10889,78,454772,2124,0,3860,0,referrerType==search,2, name_2, 08-09
Direct Entry,1046,3246,111,127677,572,0,943,0,referrerType==direct,1, name_2, 08-09
Websites,139,498,43,21249,61,0,133,0,referrerType==website,3, name_2, 08-09
Social Networks,81,176,16,6667,54,0,77,0,referrerType==social,7, name_2, 08-09
Direct Entry,6752,20806,60,994228,2994,0,5956,0,referrerType==direct,1, name_3, 08-09
Search Engines,3266,14436,50,920652,805,0,2982,0,referrerType==search,2, name_3, 08-09
Websites,250,1413,30,87955,51,0,233,0,referrerType==website,3, name_3, 08-09
Campaigns,27,165,28,8428,3,0,27,0,referrerType==campaign,6, name_3, 08-09
Social Networks,12,31,11,3900,4,0,12,0,referrerType==social,7, name_3, 08-09
我要做的是将
访问
列与
标签
列和
cmpgn_group2
行进行聚合(求和),因此最终结果如下所示:

cmpgn_group2,Campaigns,Direct Entry,Search Engines,Social Networks,Websites                                                               
name_1,2618.0,2266.0,4386.0,691.0,1097.0
name_2,,1046.0,4045.0,81.0,139.0
name_3,27.0,6752.0,3266.0,12.0,250.0
df2 = pd.pivot_table(df, values=['Visits'], columns=['Label'], index=' cmpgn_group2', aggfunc=np.sum)
df2.columns = df2.columns.map('_'.join)
df2.to_csv('ex1.csv')
但是,当我刚打印数据帧时,我得到以下结果:

访问
标签活动直接进入搜索引擎社交网络网站
cmpgn_组2
名称_1 2618.0 2266.0 4386.0 691.0 1097.0
名称_2 NaN 1046.0 4045.0 81.0 139.0
名称_3 27.0 6752.0 3266.0 12.0 250.0
这在我的Jupyter笔记本中是很好的可读性,但是当我使用
to_csv()
函数时,我希望有一个合适的csv(看起来像我上面展示的那样),不幸的是我得到的是:

,Visits,Visits,Visits,Visits,Visits
Label,Campaigns,Direct Entry,Search Engines,Social Networks,Websites
 cmpgn_group2,,,,,
 name_1,2618.0,2266.0,4386.0,691.0,1097.0
 name_2,,1046.0,4045.0,81.0,139.0
 name_3,27.0,6752.0,3266.0,12.0,250.0
在我看来,这不是一个合适的csv,我不能在我的工作流程中使用它

这是我的代码:

df=pd.read\u csv('channels\u 26\u Oct\u 2020.csv'))
df2=pd.pivot_表(df,值=['vists'],列=['Label'],索引='cmpgn_group2',aggfunc=np.sum)
打印(df2)
df2.to_csv(“频道26_十月2020_2.csv”)
正确的做法是什么?如何创建正确的csv


非常感谢

原因是
pivot\u table
创建了多索引数据帧。您可以将它们折叠为一个索引,如下所示:

cmpgn_group2,Campaigns,Direct Entry,Search Engines,Social Networks,Websites                                                               
name_1,2618.0,2266.0,4386.0,691.0,1097.0
name_2,,1046.0,4045.0,81.0,139.0
name_3,27.0,6752.0,3266.0,12.0,250.0
df2 = pd.pivot_table(df, values=['Visits'], columns=['Label'], index=' cmpgn_group2', aggfunc=np.sum)
df2.columns = df2.columns.map('_'.join)
df2.to_csv('ex1.csv')
输出CSV文件:

 cmpgn_group2,Visits_Campaigns,Visits_Direct Entry,Visits_Search Engines,Visits_Social Networks,Visits_Websites
 name_1,2618.0,2266.0,4386.0,691.0,1097.0
 name_2,,1046.0,4045.0,81.0,139.0
 name_3,27.0,6752.0,3266.0,12.0,250.0

非常感谢。我不知道map()存在于熊猫身上(现在感觉有点尴尬),我会用它做实验。它也适用于多索引吗?
df2.列
如下所示:
多索引([(“访问”、“活动”)、(“访问”、“直接输入”)、(“访问”、“搜索引擎”)、(“访问”、“社交网络”)、(“访问”、“网站”)],名称=[无”,“标签])
这就是为什么我们可以使用
map
将is合并为一个,好吧,我现在明白了,但这只适用于所有列都是我实验中的字符串的情况。如果我要连接字符串和int,我必须使用稍微不同的东西。无论如何,非常感谢你。