python - 当索引列包含重复项时,DataFrame 列中的 Pandas 系列

标签 python python-2.7 pandas

以下从 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()

从现在起不再有效,如下图所示,

  1. A 列中有多个 个同名条目(其中 3 个) he.com_300x250_bottomloopmobile,例如 4 个 he.com_300x250_bottomloopmobile)
  2. C 列对于每个除了第一个条目之外的所有内容都将始终为空 独特的值(value)。

enter image description here

我现在需要对 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/

相关文章:

python - 使用线程将 stdout 重定向到 Tkinter 文本小部件的问题

python - 在同一个图形Python中叠加不同的绘图类型

python - Pandas 数据框加入重叠的时间范围

python - 在组小部件内添加两个水平对齐的单选按钮

python - 如何在 Python 中实现基于指针的数据结构?

python - 从 JPG 到 b64encode 再到 cv2.imread()

python - 对平面文件中的日期时间值求和

Python-撤消标准输出重定向

python-2.7 - 高效读写大型文件

python - Pandas - 带公式的列