以下从CSV读取到pandas pd
:
return pd.Series((wb['impressions'].values * 1.0)/(wb['ad_requests'].values * 1.0), index=wb['\xef\xbb\xbf"ad_tag_name"']).to_dict()
不再有效,因为现在,根据下图,
我现在需要求和这些多个值" key"对于列A,对列C进行同样的操作,然后将它们插回到除法计算和系列创建中。
对前者进行单独groupby()
试验表现良好(删除了重复的密钥,这就是我想要的):
In [36]: wb.groupby('\xef\xbb\xbf"ad_tag_name"').sum()['impressions']
Out[36]:
"ad_tag_name"
he.com_300x250_bottomloopmobile 26752
he.com_300x250_bottomslidemobile 31217
然而,当我在index=wb['\xef\xbb\xbf"ad_tag_name"']
中添加以尝试重建完整公式时,pandas不再删除重复项:
In [37]: pd.Series(wb.groupby('\xef\xbb\xbf"ad_tag_name"').sum()['impressions'], index=wb['\xef\xbb\xbf"ad_tag_name"'])
Out[37]:
"ad_tag_name"
he.com_300x250_bottomloopmobile 26752
he.com_300x250_bottomloopmobile 26752
he.com_300x250_bottomloopmobile 26752
he.com_300x250_bottomslidemobile 31217
he.com_300x250_bottomslidemobile 31217
he.com_300x250_bottomslidemobile 31217
he.com_300x250_bottomslidemobile 31217
假设公式的groupby()
组件可以保持原样,我们如何告诉系列创建识别索引列的重复键?
答案 0 :(得分:1)
您似乎需要将输出分配给wb
- groupby
,其中sum
汇总所有数字列,因此没有重复项,最后为as_index=False
输出添加DataFrame
:
wb = wb.groupby("ad_tag_name", as_index=False).sum()
#alternative solution
#wb = wb.groupby("ad_tag_name").sum().reset_index()
样品:
wb = pd.DataFrame({'ad_tag_name':['he.com_300x250_bottomloopmobile'] * 3 +
['he.he.com_300x250_bottomslidemobile'] * 4,
'impressions':[309, 3029,23414,1465,5725,2918,11109],
'ad_requests':[37849,np.nan,np.nan, 42300,np.nan, np.nan, np.nan]})
#print (wb)
wb = wb.groupby('ad_tag_name', as_index=False).sum()
print (wb)
ad_tag_name ad_requests impressions
0 he.com_300x250_bottomloopmobile 37849.0 26752
1 he.he.com_300x250_bottomslidemobile 42300.0 21217
a = pd.Series((wb['impressions'].values * 1.0)/(wb['ad_requests'].values * 1.0),
index=wb['ad_tag_name']).to_dict()
print (a)
{'he.he.com_300x250_bottomslidemobile': 0.50158392434988175,
'he.com_300x250_bottomloopmobile': 0.70680863431002139}
同样要移除\xef\xbb\xbf
将encoding='utf-8-sig'
添加到read_csv
或将pandas升级到上一版本,因为此错误为closed and solved。