[英]Replacing values in pandas dataframe using nested loop based on conditions
[英]How to add values to a Pandas Dataframe using a nested for loop?
我有兩個包含浮點值的數據框。
這個想法是創建一個與第二個相同大小的新數據框。 它需要包含第一個數據框的每個值與第二個數據框的每一列的每個值之間的方程式。 這個想法是它會在傳遞到下一列之前遍歷每一行的一列。
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.squeeze
和pandas.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.