#python #python-3.x #pandas #pandas-groupby
#python #python-3.x #pandas #pandas-groupby
Вопрос:
Я хочу извлечь значение из предыдущего столбца, но из той же строки, и мне нужно умножить это значение на 5 и записать его в текущее место.
Я пробовал метод сдвига pandas, но он не работает. после этого я написал отдельную функцию для получения имени предыдущего столбца .. но я думаю, что это не самый лучший подход.
'''
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
Ответ №1:
Вот один из способов 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
Ответ №2:
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)
Ответ №3:
Если у вас действительно есть только три столбца для заполнения, просто выполните умножение:
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
Комментарии:
1. Спасибо, что поделились этим решением. но у меня много столбцов, и я хотел применить это только к нулевым значениям.