如何使用嵌套的for循环向Pandas数据框架添加值?

watbbzwu  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(135)

我有两个包含浮点值的数据框。
1.第一个是包含位置的1列 Dataframe 。
1.第二个是ncol和nrows的矩阵,ncol等于ID的数目,nrows等于第一 Dataframe 的nrow。
其思想是创建一个与第二个数据框大小相同的新数据框。它需要包含第一个数据框的每个值与第二个数据框中每列的每个值之间的等式。其思想是在传递到下一个数据框之前,它将迭代一列的每一行。
计算公式类似于df1 * df2 / len(df1)+1示例数据:

df1 = pd.DataFrame([10,20,30,40,50,60], columns=['POS'])
df2 = pd.DataFrame({"ID1" : [0,2,4,6,8,10] , "ID2" :[1,3,5,7,9,11]})
final = pd.DataFrame({"ID1" : [0, 5.714285714, 17.14285714, 34.28571429, 57.14285714, 85.71428571] , "ID2" :[1.428571429, 8.571428571, 21.42857143, 40, 64.28571429, 94.28571429]})

我想嵌套循环应该是这样的,但是我还是不能得到正确的答案,我错过了什么?

final = pd.DataFrame([])
for i in list(range(0,len(df1))):
          for j in list(range(0,len(df2))):
                        final.append(df2.iloc[i,j] * df1[0][i] / len(df1)+1)

R中,答案是:

for (i in 1:nrow(df1)){
  for (j in 1:ncol(df2)){
    final[i,j] <- (df2[i,j] * df1[i,1]) / nrow(df1)+1
  }
}
umuewwlo

umuewwlo1#

以一种 * Pandorable * 的方式,您可以使用pandas.DataFrame.squeezepandas.DataFrame.mul来实现这一点:

result = df2.mul(df1.squeeze(), axis=0).div(len(df1)+1)

输出:

print(result)

         ID1        ID2
0   0.000000   1.428571
1   5.714286   8.571429
2  17.142857  21.428571
3  34.285714  40.000000
4  57.142857  64.285714
5  85.714286  94.285714
nqwrtyyt

nqwrtyyt2#

明确用于df1 * df2 / (len(df1) * df2)计算:

pd.DataFrame((df1.values * df2.values) / (len(df1) * df2.values), columns=df2.columns)
ID1        ID2
0        NaN   1.666667
1   3.333333   3.333333
2   5.000000   5.000000
3   6.666667   6.666667
4   8.333333   8.333333
5  10.000000  10.000000

相关问题