我的一个数据块笔记本中有一个 pandas groupby 的奇怪错误。
数据是机密的,所以这是我的错误的虚拟插图(数据框 df 实际上是合并其他两个数据框的结果)。
如果你想复制数据框:
data = {'group1': ['a', 'b','a','a','a'],
'group2': ['f', 'f', 'f' , 'f', 'f'],
'aggregate': ['1', '2','3','4','5'],}
df = pd.DataFrame (data, columns = ['group1','group2','aggregate'])
在这个阶段,dataframe df 显示正确。现在我正在做一个 groupby :
agg = df.groupby(['group2', 'group1'], as_index=False).agg({'aggregate':', '.join})
我应该得到这个:
但我明白了:
ValueError:值的长度与索引的长度不匹配
“让它发挥作用”的唯一方法是:
修复1: agg = df.groupby(['group2', 'group1'], as_index=True).agg({'aggregate':', '.join}).reset_index()
我明白了:
修复 2: 初始合并后,“重置数据框”,得到一个新的。 这很好用,但不是很好。
df = pd.DataFrame.from_dict(drift.to_dict())
我的数据是否以某种方式损坏了?怎么样?
任何级别的反馈都将不胜感激(无论您是否知道错误的原因 - 这会很棒! - 或不知道),只是为了让我更好地了解幕后可能发生的事情。
非常期待这里的任何建议或意见。谢谢!
当“
groupby
列”之一具有category
类型时,Pandas 会抛出该错误。
解决方法可能是调用
astype
并选择文字,例如string
:
df = df.astype({'group1': 'string', 'group2': 'string'})
这道题大概有同样的错误