Python 执行数据帧计算时,最上面一行返回所有零,所有其他行都正确

Python 执行数据帧计算时,最上面一行返回所有零,所有其他行都正确,python,pandas,Python,Pandas,我正在编写一个函数,它接受一个数据帧,并通过简单的百分比计算将第二个数据帧连接到原始数据帧旁边。我希望行的值后面跟着百分比。以下是一个例子: A, B, A (%), B (%) 1, 1, 0.50, 0.50 1, 1, 0.50, 0.50 但是,我的代码返回: A, B, A (%), B (%) 1, 1, 0 , 0 1, 1, .50 , .50 我使用的第一行和大小数据框

我正在编写一个函数,它接受一个数据帧,并通过简单的百分比计算将第二个数据帧连接到原始数据帧旁边。我希望行的值后面跟着百分比。以下是一个例子:

A,   B,   A (%),   B (%)
1,   1,    0.50,     0.50  
1,   1,    0.50,     0.50
但是,我的代码返回:

A,   B,   A (%),   B (%)
1,   1,     0 ,      0  
1,   1,    .50 ,    .50
我使用的第一行和大小数据框返回一行零,随后的行中的计算都是正确的。我正在运行的代码处理一个数据帧,它有3列包含值。。。伯爵、IV、P是他们的头衔。 我已附上以下代码:

    column_list = []
for column in frame.columns[1:]:
    column_list.append(column + ' (%)')

percentages = pd.DataFrame(columns = column_list)
for i in range(frame.shape[0]):
    percentages.loc[i] = [float(frame.iloc[i,1])/float(frame['Count'].sum()), 
float(frame.iloc[i,2])/float(frame['IV'].sum()), 
float(frame.iloc[i,3])/float(frame['P'].sum())]

return_frame = pd.concat([frame,percentages], axis = 1)


return return_frame

我不确定代码中的错误在哪里,但这里有一个实现所需输出的简明方法:

import pandas as pd
df = pd.DataFrame({'A': [1, 3], 'B': [9, 7]})
df_percent = df.apply(lambda r: r/sum(r), axis=1).add_suffix('( %%)')
df_result = pd.concat([df, df_percent], axis=1)
df_结果的内容

   A  B  A (%)  B (%)
0  1  9    0.1    0.9
1  3  7    0.3    0.7
此外,您可能希望将
df_percent
值乘以100,以将技术上的分数转换为百分比

编辑:要获取按列而不是按行的百分比,请将
axis=1
更改为
axis=0
df_result
的内容如下:

   A  B  A( %)   B( %)
0  1  9   0.25  0.5625
1  3  7   0.75  0.4375

对于输入
df
dataframe-这应该
df.join((df/df.sum()).add_后缀(“(%”))
work,我想是吧?您是在寻找行还是列的百分比?如果
frame.loc[0,'B']
为2,您的目标是将
frame.loc[0,'A(%)']
设为0.5还是0.333?我试图获得各列的百分比,很抱歉,我提供的示例没有明确说明这一点。非常感谢您的回答,但我想要计算值的方式有点不同。我想让它计算列的百分比,所以它看起来更像这样(0,0)=.25(0,1)=.5625(1,0)=.75(1,1)=。4375@JamesRacanelli啊,我明白了!只需将
axis=1
更改为
axis=0