gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:44 24 4
gpt4 key购买 nike

以下从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com