我想用大熊猫做一些与
import pandas as pd
dict1 = {((('Message1',),('Message1','Message4',)),('Message4',)): 10}
dict2 = {(1677, 468): 3}
dict3 = {(1677, 468): 1, (2078, 869): 1 }
df1 = pd.DataFrame.from_dict(dict1, orient='index'). \
reset_index(). \
rename(columns={'index': 'pair', 0: 'pair_count'})
df2 = pd.DataFrame.from_dict(dict2, orient='index'). \
reset_index(). \
rename(columns={'index': 'pair', 0: 'pair_count'})
df3 = pd.DataFrame.from_dict(dict3, orient='index'). \
reset_index(). \
rename(columns={'index': 'pair', 0: 'pair_count'})
pd.concat([df1, df2, df3]).\
groupby('pair').\
sum()
如果您运行上面的代码,这应该可以工作。但是,对于我的数据,它看起来非常相似,但是对于dict2和dict3的使用时间更长,所以这是行不通的。我可以连接DataFrame,但是当我进行分组和求和时,我会收到一个空的DataFrame。
不幸的是,当我尝试通过提取数据来重现错误时,确实可以。 (这就是为什么我无法发布发生错误的示例。)所以我想这个问题与数据本身无关……也许是因为这是最奇怪的事情:如果我将dict1更改为
dict1 = {((('Message1',),('Message1',)),('Message4',)): 10}
我得到了预期的结果。
最佳答案
这对不是不可散列的(它们是),
因为如果是这种情况,df1
在创建期间会给出错误
这是熊猫groupby
排序的事实,Python无法对int
vs tuple
vs str
进行排序,因此将groupby
更改为groupby('pair', sort=False)
应该可以解决问题
pd.concat([df1, df2, df3]).\
groupby('pair', sort=False).\
sum()
@Allen的答案将
tuple
更改为string
,从而避免了根本原因关于python - groupby和agg之后奇怪地清空DataFrame,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44069274/