Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从数据帧中获取同一行(上一列)的上一个值?_Python_Python 3.x_Pandas_Pandas Groupby - Fatal编程技术网

Python 如何从数据帧中获取同一行(上一列)的上一个值?

Python 如何从数据帧中获取同一行(上一列)的上一个值?,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我想从上一列中获取值,但却是同一行,我需要将该值乘以5,然后将其写入当前位置 我试过大熊猫的移位法,但不起作用。之后,我编写了单独的函数来获取前面的列名。但是我认为这不是一个好方法 ''' def get_previous_column_name(wkName): v = int(wkName.strip('W')) newv = str(v - 1) if len(newv) == 1: newv = '0' + newv

我想从上一列中获取值,但却是同一行,我需要将该值乘以5,然后将其写入当前位置

我试过大熊猫的移位法,但不起作用。之后,我编写了单独的函数来获取前面的列名。但是我认为这不是一个好方法

'''
def get_previous_column_name(wkName):
        v = int(wkName.strip('W'))
        newv = str(v - 1)
        if len(newv) == 1:
            newv = '0' + newv
        return 'W' + newv
'''

dataframe: 

W01,W02,W03,W04,W05
7, 8
10,20
20, 40

expected result: 

W01,W02,W03,W04,W05
7, 8, 40, 200, 1000
10, 20, 100, 500, 2500
20, 40, 200, 1000, 5000

这里有一种方法
ffill
+
cumsum

df=df.ffill(1)*(5)**df.isnull().cumsum(1)
df
Out[230]: 
    W01   W02    W03     W04     W05
0   7.0   8.0   40.0   200.0  1000.0
1  10.0  20.0  100.0   500.0  2500.0
2  20.0  40.0  200.0  1000.0  5000.0

如果确实只有三列要填充,只需执行乘法:

df['W03'] = df['W02'] * 5
df['W04'] = df['W03'] * 5
df['W05'] = df['W04'] * 5
df
#   W01  W02  W03   W04   W05
#0    7    8   40   200  1000
#1   10   20  100   500  2500
#2   20   40  200  1000  5000

感谢分享此解决方案。但我有很多列,我只想将其应用于空值。
import pandas as pd
data = pd.read_csv('C:/d1', sep=',', header=None,names=['W1','W2'])
df=pd.DataFrame(data)
dfNew=pd.DataFrame(columns=['W1','W2','W3','W4','W5'])
(rows,columns)=df.shape

for index in range(rows):
    tempRow=[df.iat[index,0],df.iat[index,1],df.iat[index,1]*5,df.iat[index,1]*25,df.iat[index,1]*125]
    dfNew.loc[len(dfNew)]=tempRow

print()
print(dfNew)