我正在编写一个函数,它接受一个数据帧,并通过简单的百分比计算将第二个数据帧连接到原始数据帧旁边。我想让行只是值后面跟百分比。这是一个例子:
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 列,其中包含值... Count、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_result
的内容:
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
关于python - 进行 Pandas DataFrame 计算时,顶行返回全零,所有其他行均正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44851758/