我目前正在研究一个问题,现在被困在执行其中一个步骤中。为了弥补可能性,我组成了以下示例,这是一个简单的场景。文本的长度可能很吓人,但这只是我试图更好地解释它。
这种简单的方案如下所示:我有一个查找表,其中存储了包含每种情况下最佳参数组合( df1 )的值。然后,我进行模拟以检查给定情况下查询表的参数是否更新,并将所有内容存储在 df2 上,然后提取返回最高结果的行。现在,我想要获取为参数1和2提取的最大值,然后针对该特定情况更新 df1 。所以请考虑:
import pandas as pd
import numpy as np
import random
np.random.seed(1)
a = np.linspace(0,10,11)
b = np.tile(0,11)
c = np.tile(0,11)
df1 = pd.DataFrame([a,b,c]).T
df1.columns = ['Situation','Parameter 1','Parameter 2']
d = np.tile(8,11)
e = abs(np.random.randn(11))
f = abs(np.random.randn(11))
g = abs(100*np.random.randn(11))
df2 = pd.DataFrame([d,e,f,g]).T
df2.columns = ['Situation', 'Parameter 1', 'Parameter 2', 'Outcome']
x = df2.loc[df2['Outcome'].idxmax()]
起初,我的 df1 如下:
Situation Parameter 1 Parameter 2
0 0.0 0.0 0.0
1 1.0 0.0 0.0
2 2.0 0.0 0.0
3 3.0 0.0 0.0
4 4.0 0.0 0.0
5 5.0 0.0 0.0
6 6.0 0.0 0.0
7 7.0 0.0 0.0
8 8.0 0.0 0.0
9 9.0 0.0 0.0
10 10.0 0.0 0.0
对于 df2 的最大值,我将得到这样的系列:
Situation 8.000000
Parameter 1 2.301539
Parameter 2 0.172428
Outcome 93.576943
我想要的是 df1 看起来像这样:
Situation Parameter 1 Parameter 2
0 0.0 0.0 0.0
1 1.0 0.0 0.0
2 2.0 0.0 0.0
3 3.0 0.0 0.0
4 4.0 0.0 0.0
5 5.0 0.0 0.0
6 6.0 0.0 0.0
7 7.0 0.0 0.0
8 8.0 2.301539 0.172428
9 9.0 0.0 0.0
10 10.0 0.0 0.0
希望我能做到简洁明了,尽管解释的长度。非常感谢您在此方面的帮助!
答案 0 :(得分:1)
在我看来,您的Situation
列应为索引,我将执行以下操作:
df1 = df1.set_index('Situation')
df1.loc[df2.iloc[0], :] = df2.iloc[1:]
考虑到df2
中的行顺序与您所描述的完全一样,这将满足您的要求。您的另一种选择是将df2
变成类似df1
的DF:
df2 = pd.DataFrame(df2).T.set_index('Situation')
然后您可以按索引进行分配:
df1.loc[df2.index[0], :] = df2.iloc[0, :]
答案 1 :(得分:1)
您可以替换为
不确定是否确实需要3.和4.,但是对于Pandas来说,它仍然是单线的。
pod update