你能帮我破解一下计算吗?

我有下表:

python - 遍历行和列,python-LMLPHP

我需要做的是将预期频率计算为(行总数*列总数)/总计

预期结果:
python - 遍历行和列,python-LMLPHP

我假设我需要遍历行和列。我试图做到这一点:

for i, row in df_dropped.iterrows():
for j, column in row.iteritems():
    data[row][column] = df_dropped.iloc[i, 3] * df_dropped.iloc[2, j]


错误出现:
基于位置的索引只能具有[整数,整数切片(起始点为INCLUDED,结束点为EXCLUDED),整型列表,布尔数组)类型

我究竟做错了什么?

最佳答案

numpy.outer用于最后一列和最后一行的外部乘积并除以
loc选择的标量为numpy数组:

t = df.loc['col_sum', 'row_sum']
arr = np.outer(df['row_sum'], df.loc['col_sum']) / t


然后通过构造函数创建带有索引的DataFrame,以删除最后一列和行:

df1 = pd.DataFrame(arr[:-1, :-1],
                   columns=df.columns[:-1],
                   index=df.index[:-1]).add_prefix('exp_')
print (df1)
   exp_satisfied  exp_neutral  exp_dissatisfied
0      24.605263    20.842105          9.552632
1     145.394737   123.157895         56.447368


获取新的列名称:

cols = [item for x in df.columns[:-1] for item in (x, 'exp_' + x)]
print (cols)
['satisfied', 'exp_satisfied', 'neutral', 'exp_neutral', 'dissatisfied', 'exp_dissatisfied']


通过concatreindex连接在一起以实现预期的列顺序:

df = pd.concat([df.iloc[:-1, :-1], df1], axis=1).reindex(columns=cols)
print (df)
   satisfied  exp_satisfied  neutral  exp_neutral  dissatisfied  \
0         30      24.605263       17    20.842105             8
1        140     145.394737      127   123.157895            58

   exp_dissatisfied
0          9.552632
1         56.447368

关于python - 遍历行和列,python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53539488/

10-13 07:40