Как добавить некоторые вычисления в столбцы данных в Python - PullRequest
0 голосов
/ 27 сентября 2019

Input excel sheet

У меня есть лист Excel, использующий pandas.read_excel, я получил вывод в dataframe, но я хочу добавить вычисления в после прочтения через панд Iнужно поспешить после расчета в каждом столбце x и y.

ratiox = (73.77481944859028 - 73.7709567323327) / 720
ratioy = (18.567453940477293 - 18.56167674097576) / 1184
mapLongitudeStart = 73.7709567323327
mapLatitudeStart = 18.567453940477293
longitude = 0, latitude = 0
longitude = (mapLongitudeStart + x1 * ratiox))  #I have take for the single column x1 value
latitude = (mapLatitudeStart - (-y1 *ratioy ))   # taken column y1 value  

как применить этот расчет к каждому столбцу и строке x и ya, значения которых не должны принимать нулевые значения.И я хочу создать новый фрейм данных, выполнив вычисления в столбцах

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Сначала я бы порекомендовал преобразовать ваши данные в длинный формат, чтобы вы могли естественным образом избавиться от пустых ячеек.Кроме того, большинство функций pandas работают лучше таким образом, потому что тогда вы можете использовать такие вещи, как группировка по операциям над всеми x или y или колеблющимися измерениями

from itertools import chain
import pandas as pd

## this part is only to have a running example 
## here you would load your excel file
D = pd.DataFrame( 
        np.random.randn(10,6), 
        columns =chain(*[ [f"x{i}", f"y{i}"]  for i in range(1,4)])
    ) 

D["rowid"] = pd.np.arange(len(D))
D = D.melt(id_vars="rowid").dropna()
D["varIndex"] = D.variable.str[1]
D["variable"] = D.variable.str[0]

D = D.set_index(["varIndex","rowid","variable"])\
    .unstack("variable")\
    .droplevel(0, axis=1)

Таким образом, эти преобразования дадут вам таблицу, в которой у вас будет индекс какдля исходного идентификатора строки (может быть, это временной ряд или что-то еще), а также индекс переменной x 1 или x 2 и т. д.

table after long format

Теперь вы можете выполнять свои расчеты, перезаписывая предыдущие столбцы

## Everything here is a constant
ratiox = (73.77481944859028 - 73.7709567323327) / 720
ratioy = (18.567453940477293 - 18.56167674097576) / 1184
mapLongitudeStart = 73.7709567323327
mapLatitudeStart = 18.567453940477293

# apply the calculations directly to the columns
D.x = (mapLongitudeStart + D.x * ratiox))
D.y = (mapLatitudeStart - (-D.y * ratioy ))
0 голосов
/ 27 сентября 2019

Попробуйте следующий код:

import pandas as pd
import itertools
df = pd.read_excel('file_path')
dfx=df.ix[:,'x1'::2]
dfy=df.ix[:,'y1'::2]
li=[dfx.apply(lambda x:mapLongitudeStart + x * ratiox),dfy.apply(lambda y:mapLatitudeStart - (-y))]
df_new=pd.concat(li,axis=1)
df_new = df_new[list(itertools.chain(*zip(dfx.columns,dfy.columns)))]
print(df_new)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...