以下从 CSV 中提取的内容作为 pd
读入 pandas:
return pd.Series((wb['impressions'].values * 1.0)/(wb['ad_requests'].values * 1.0), index=wb['\xef\xbb\xbf"ad_tag_name"']).to_dict()
从现在起不再有效,如下图所示,
- A 列中有多个 个同名条目(其中 3 个) he.com_300x250_bottomloopmobile,例如 4 个 he.com_300x250_bottomloopmobile)
- C 列对于每个除了第一个条目之外的所有内容都将始终为空 独特的值(value)。
我现在需要对 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()
组件可以保持不变,我们如何告诉系列创建来识别索引列的重复键?
最佳答案
看来您需要将输出分配给wb
- groupby
使用 sum
聚合所有数字列,因此没有重复项,最后为 DataFrame
输出添加 as_index=False
:
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到最新版本,因为这个bug是closed and solved .
关于python - 当索引列包含重复项时,DataFrame 列中的 Pandas 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43572047/