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
。