python - 对列进行分组和聚合会重复 pandas 中的列
问题描述
我正在加入两个表left_table
和right_table
导致行爆炸的非唯一键。然后我想聚合行以匹配left_table
. 为此,我聚合 left_table 列。奇怪的是,当我将表格保存为双列时left_table
。似乎列left_table
成为结果数据框的索引......
左表
k1 k2 s v c target
0 1 3 20 40 2 2
1 1 2 10 20 1 1
2 1 2 10 80 2 1
右表
k11 k22 s2 v2
0 1 2 0 100
1 2 3 30 200
2 1 2 10 300
左连接
k1 k2 s v c target s2 v2
0 1 3 20 40 2 2 NaN NaN
1 1 2 10 20 1 1 0.0 100.0
2 1 2 10 20 1 1 10.0 300.0
3 1 2 10 80 2 1 0.0 100.0
4 1 2 10 80 2 1 10.0 300.0
聚合代码
dic = {}
keys_to_agg_over = left_table_col_names
for col in numeric_cols:
if col in all_cols:
dic[col] = 'median'
left_join = left_join.groupby(keys_to_agg_over).aggregate(dic)
聚合后(左表列数加倍)
k1 k2 s v c target s2 v2
k1 k2 s v c target
1 2 10 20 1 1 1 2 10 20 1 1 5.0 200.0
80 2 1 1 2 10 80 2 1 5.0 200.0
3 20 40 2 2 1 3 20 40 2 2 NaN NaN
保存到 csv 文件
k1,k2,s,v,c,target,k1,k2,s,v,c,target,s2,v2
1,2,10,20,1,1,1,2,10,20,1,1,5.0,200.0
1,2,10,80,2,1,1,2,10,80,2,1,5.0,200.0
1,3,20,40,2,2,1,3,20,40,2,2,,
我尝试重置索引,left_join.reset_index()
但我得到了
ValueError: cannot insert target, already exists
如何解决列倍增的问题?
解决方案
你有几个选择:
存储 csv 不包括索引:我猜您正在使用该
to_csv
方法将结果存储在 csv 中。默认情况下,它包括您在生成的 csv 中的索引列。您to_csv(index=False)
可以避免存储它们。reset_index 删除它:您可以使用它
left_join.reset_index(drop=True)
来丢弃索引列,而不是将它们添加到数据框中。默认情况下,reset_index 将当前索引列添加到数据框中,生成ValueError
您获得的。
推荐阅读
- r - 解析 R 中缺少标签的以属性为中心的 XML
- java - HTTP 400 从 Apache HTTP 客户端执行多部分请求时
- css - Internet Explorer 中的 CSS 网格问题
- android - 加载模型时,libsceneform_animation.so 中的 SIGBUS/SIGSEGV 崩溃 #608
- kubernetes - Controller-runtime 客户端如何让 RESTClient 运行命令
- ios -
- excel - 在 Range 循环中选择 Case
- javascript - 如何在 ember.js 中实现正确的过滤
- sql - 从数据透视表中删除空值(从多列和不同的数据类型)
- oauth - 为什么 Google OAuth2 向 url 添加哈希?