我想计算pandas数据帧的行中心质量(cm)(大约4000行x 7100列)。我的行的索引是字符串类型,值只是数字。所以基本上我的数据框架是这样的 - 只是更大:
import pandas as pd
inp = [{'name':'aaa', 'c2':100, 'c3': 20, 'c4':10}, {'name':'bbb','c2':110, 'c3': 20, 'c4':10}, {'name':'ccc','c2':120, 'c3': 20, 'c4':10}]
df = pd.DataFrame(inp)
df = df.set_index('name')
c2 c3 c4
name
aaa 100 20 10
bbb 110 20 10
ccc 120 20 10
在R中,我会使用它(我的矩阵称为m,并且与上面的数据框具有相同的结构):
cm <- apply( m, 1, function(x) sum( x*(1:length(x)) ) / sum(x) )
编写一个计算cm的函数并将其逐行应用到我的数据框应该相当容易,但不知怎的,我不明白这一点。我的Python技能非常有限。我还没理解语法如何基本上迭代行的元素来获得cm。
答案 0 :(得分:0)
您可以使用pandas的.apply
方法
import pandas as pd
inp = [{'name':'aaa', 'c2':100, 'c3': 20, 'c4':10}, {'name':'bbb','c2':110, 'c3': 20, 'c4':10}, {'name':'ccc','c2':120, 'c3': 20, 'c4':10}]
df = pd.DataFrame(inp)
df = df.set_index('name')
def series_sum(pd_series):
return np.sum(np.dot(pd_series.values, np.asarray(range(1, len(pd_series)+1)))/np.sum(pd_series))
df.apply(series_sum, axis=1)