簡體   English   中英

如何使用嵌套 for 循環將值添加到 Pandas Dataframe?

[英]How to add values to a Pandas Dataframe using a nested for loop?

我有兩個包含浮點值的數據框。

  1. 第一個是包含位置的 1 列數據框。
  2. 第二個是ncol等於ID個數,nrows等於第一個數據幀的nrow的矩陣。

這個想法是創建一個與第二個相同大小的新數據框。 它需要包含第一個數據框的每個值與第二個數據框的每一列的每個值之間的方程式。 這個想法是它會在傳遞到下一列之前遍歷每一行的一列。

ecuation 類似於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
  }
}

以可擴展的方式,您可以使用pandas.DataFrame.squeezepandas.DataFrame.mul

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

Output:

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

明確用於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM