在pandas数据框中,如何对选择的行执行操作?

时间:2019-10-13 02:21:26

标签: python pandas numpy

我有以下数据框:

data = {'A': [1,2,3,4,5,6,7], 'B':[1.1,1.3,1.35,1.43,1.5,1.54,1.6]}

df1 = pd.DataFrame(data=data)

我想创建一个新的df,其值基于对df1中B列的操作。

新df2 ['Output']中的每一行:

 = -B[i] + 2*B[i+1] -B[i+2]

我代表行号。

df2中每行的新名称应结合A列中的数字。

结果数据框应如下图所示

df2 = pd.DataFrame({'Output':[0.15,-0.03,0.01,0.03,-0.02]})

df2['Name'] = ['123', '234','345','456','567']

谢谢!

2 个答案:

答案 0 :(得分:2)

根据您的逻辑:

df2 = (df['B'].shift() * 2 - df['B'] - df['B'].shift(2)).to_frame(name='Output')

或者您可以

df2 = (-df['B'].diff().diff()).to_frame(name='Output')

输出:

   Output
0     NaN
1     NaN
2    0.15
3   -0.03
4    0.01
5    0.03
6   -0.02

答案 1 :(得分:1)

如果我正确理解了这个问题,则结果数据帧应仅包含非NaN值(对于i,i + 1和i + 2有效)。我认为答案也将不需要对@Quang Hoang提供的内容进行任何修改。

df2 = (df1['B'].shift() * 2 - df1['B'] - df1['B'].shift(2)).to_frame(name='Output').shift(-2).dropna()

输出

>>> df2 = (df1['B'].shift() * 2 - df1['B'] - df1['B'].shift(2)).to_frame(name='Output').shift(-2).dropna()
>>> df2
   Output
0    0.15
1   -0.03
2    0.01
3    0.03
4   -0.02