遍历行和列,python

时间:2018-11-29 12:51:10

标签: python pandas

能否请您帮我进行计算?

我有下表:

enter image description here

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

预期结果: enter image description here

我假设我需要遍历行和列。我尝试用以下方法做到这一点:

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),类似整数的列表,布尔数组)类型

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

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

def print_pyramid(_count = 1):
  if _count < 10:
    print((lambda x:x[::-1] if not _count%2 else x)(''.join(map(str, range(1, _count+1)))))
    print_pyramid(_count+1)


print_pyramid()

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

1
21
123
4321
12345
654321
1234567
87654321
123456789

获取新的列名称:

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

通过concatreindex一起加入以期望对列进行排序:

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

答案 1 :(得分:1)

Jezrael提供了一个很好的答案,您可以使用numpy和pandas计算期望的频率。 您还可以使用python统计库statsmodels来计算这些统计信息。

例如,要计算期望频率表,您可以执行以下操作:

import statsmodels.api as sm
expected_values = sm.stats.Table(df).fittedvalues

有关以下信息的更多信息:statsmodels contingency tables