我有数据要按城市和日期分组(单独的列),并使用剩余的列计算新值。更具体地说,其他列是6个种族的按种族统计的人数。因此,我有8列,两个分组列和6个我想总结的列。我想通过计算熵来总结它们 每天
然而,城市和白天是字符串,我的熵函数不喜欢这样。当分组列是int64时,它就工作了。我尝试将city和day列转换为虚拟变量,但错误仍然存在
借用this post,下面是一个使用我的函数的例子
# The function
def newEntropy(x):
A = x
pA = A / A.sum()
Shannon2 = -np.nansum(pA * np.log2(pA))
return Shannon2
# Make fake data
df = pd.DataFrame(np.random.rand(20,5), columns=list('abcde'))
df['group'] = [0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 5, 5]
df['group2'] = [6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10]
# Works
df.groupby(['group', 'group2']).apply(newEntropy)
# Having an index column that is a string causes failure
df['group2'] = df['group2'].astype('str')
df.groupby(['group', 'group2']).apply(newEntropy)
我得想办法让新熵发挥作用。它似乎应该忽略分组列,但事实并非如此。我也不希望将'group2'转换为int64,因为在我的实际数据中它是'YYYY-MM-DD'。我的数据相当于'group1'也是一个国家名称,我更喜欢保留为字符串
我应该说,我可以创建一个新的数据帧,它是我想要的分组,然后对它应用newEntropy。如果有更简洁的东西就好了,感觉应该更简单
你想在
apply
后面function
的列有多具体相关问题 更多 >
编程相关推荐