我有一个数据集如下:
date f1 f2 e1 e2
01/01/2020 40.0 10.0 100.0 15.0
01/02/2020 30.0 20.0 200.0 25.0
01/03/2020 20.0 30.0 300.0 35.0
01/04/2020 10.0 40.0 400.0 25.0
01/05/2020 50.0 50.0 500.0 55.0
01/06/2020 60.0 60.0 600.0 15.0
我正在尝试将 {f1, f2} 和 {e1, e2} 之间的差异分别转换为下面给出的另一个数据帧:
date h1 h2
01/01/2020 -60.0 -5.0
01/02/2020 -170.0 -5.0
01/03/2020 -280.0 -5.0
01/04/2020 -390.0 15.0
01/05/2020 -450.0 -5.0
01/06/2020 -540.0 45.0
是否有可能有效地做到这一点?谢谢。
答案 0 :(得分:1)
如果你想功能化,这应该可行:
diff = lambda x, y: x - y
df['h1'] = list(map(diff, df['f1'], df['e1']))
df['h2'] = list(map(diff, df['f2'], df['e2']))
答案 1 :(得分:1)
您可以使用 numpy
广播一次计算两列
df1 = df['date'].to_frame()
df1[['h1','h2']] = df[['f1','f2']].sub(df[['e1','e2']].to_numpy())
df1
出:
date h1 h2
0 01/01/2020 -60.0 -5.0
1 01/02/2020 -170.0 -5.0
2 01/03/2020 -280.0 -5.0
3 01/04/2020 -390.0 15.0
4 01/05/2020 -450.0 -5.0
5 01/06/2020 -540.0 45.0
答案 2 :(得分:1)
最简单、更高效(最快)的方法是使用数据框的函数apply
:
df["h1"]=df.apply(lambda row: row["f1"]-row["e1"], axis=1)
df["h2"]=df.apply(lambda row: row["f2"]-row["e2"], axis=1)
使用此函数,您可以访问每一行,并计算一个新值,在本例中为一个简单的减法。如果操作更困难(使用“if”或其他),我强烈建议预定义如下函数(搜索均值):
def creating_2(row):
return ((row["f2"]+row[e2])/2)
df["mean"]=df.apply(lambda row: creating_2(row), axis=1)
这个函数有一个限制,你只能在同一行之间进行操作。如果要减去第一行的“e1”和第二行的“f1”,则不允许使用此函数。 但是,对于您的情况,这是一个不错的选择。