Pandas Column математические операции Нет ошибки нет ответа

Я пытаюсь выполнить некоторые простые математические операции над файлами.

Столбцы ниже file_1.csv динамичны по своему характеру, количество столбцов будет увеличиваться время от времени. Поэтому мы не можем зафиксировать last_column

master_ids.csv : перед любой предварительной обработкой

 Ids,ref0 #the columns increase dynamically 1234,1000 8435,5243 2341,563 7352,345 

master_count.csv : перед любой обработкой

 Ids,Name,lat,lon,ref1 1234,London,40.4,10.1,500 8435,Paris,50.5,20.2,400 2341,NewYork,60.6,30.3,700 7352,Japan,70.7,80.8,500 1234,Prague,40.4,10.1,100 8435,Berlin,50.5,20.2,200 2341,Austria,60.6,30.3,500 7352,China,70.7,80.8,300 

master_Ids.csv : после одной предварительной обработки

 Ids,ref,00:30:00 1234,1000,500 8435,5243,300 2341,563,400 7352,345,500 

master_count.csv : ожидается Выход (добавление / слияние)

 Ids,Name,lat,lon,ref1,00:30:00 1234,London,40.4,10.1,500,750 8435,Paris,50.5,20.2,400,550 2341,NewYork,60.6,30.3,700,900 7352,Japan,70.7,80.8,500,750 1234,Prague,40.4,10.1,100,350 8435,Berlin,50.5,20.2,200,350 2341,Austria,60.6,30.3,500,700 7352,China,70.7,80.8,300,750 

Например: Ids: 1234 появляется 2 раза, поэтому значение ids:1234 в current time (00:30:00) равно 500 которое должно быть ref1 на счет количества ids а затем добавить к соответствующим значениям из ref1 и создать новый столбец с текущим временем.

master_Ids.csv : после другой предварительной обработки

 Ids,ref,00:30:00,00:45:00 1234,1000,500,100 8435,5243,300,200 2341,563,400,400 7352,345,500,600 

master_count.csv : ожидаемый результат после другого выполнения (Merge / append)

 Ids,Name,lat,lon,ref1,00:30:00,00:45:00 1234,London,40.4,10.1,500,750,550 8435,Paris,50.5,20.2,400,550,500 2341,NewYork,60.6,30.3,700,900,900 7352,Japan,70.7,80.8,500,750,800 1234,Prague,40.4,10.1,100,350,150 8435,Berlin,50.5,20.2,200,350,300 2341,Austria,60.6,30.3,500,700,700 7352,China,70.7,80.8,300,750,600 

Таким образом, current time 00:45:00 , и мы делим current time value на count ids , а затем add к соответствующим значениям ref1 , создавая новый столбец с new current time .

Программа: Jianxun Li

 import pandas as pd import numpy as np csv_file1 = '/Data_repository/master_ids.csv' csv_file2 = '/Data_repository/master_count.csv' df1 = pd.read_csv(csv_file1).set_index('Ids') # need to sort index in file 2 df2 = pd.read_csv(csv_file2).set_index('Ids').sort_index() # df1 and df2 has a duplicated column 00:00:00, use df1 without 1st column temp = df2.join(df1.iloc[:, 1:]) # do the division by number of occurence of each Ids # and add column any time series def my_func(group): num_obs = len(group) # process with column name after next timeseries (inclusive) group.iloc[:,4:] = (group.iloc[:,4:]/num_obs).add(group.iloc[:,3], axis=0) return group result = temp.groupby(level='Ids').apply(my_func) 

Программа выполняется без ошибок и без вывода. Нужны некоторые предложения по исправлению, пожалуйста.

3 Solutions collect form web for “Pandas Column математические операции Нет ошибки нет ответа”

Эта программа предполагает обновление как master_counts.csv, так и master_ids.csv с течением времени и должно быть устойчивым к срокам обновлений. То есть, он должен давать правильные результаты, если вы запускаете несколько раз при одном и том же обновлении или если обновление отсутствует.

 # this program updates (and replaces) the original master_counts.csv with data # in master_ids.csv, so we only want the first 5 columns when we read it in master_counts = pd.read_csv('master_counts.csv').iloc[:,:5] # this file is assumed to be periodically updated with the addition of new columns master_ids = pd.read_csv('master_ids.csv') for i in range( 2, len(master_ids.columns) ): master_counts = master_counts.merge( master_ids.iloc[:,[0,i]], on='Ids' ) count = master_counts.groupby('Ids')['ref1'].transform('count') master_counts.iloc[:,-1] = master_counts['ref1'] + master_counts.iloc[:,-1]/count master_counts.to_csv('master_counts.csv',index=False) %more master_counts.csv Ids,Name,lat,lon,ref1,00:30:00,00:45:00 1234,London,40.4,10.1,500,750.0,550.0 1234,Prague,40.4,10.1,100,350.0,150.0 8435,Paris,50.5,20.2,400,550.0,500.0 8435,Berlin,50.5,20.2,200,350.0,300.0 2341,NewYork,60.6,30.3,700,900.0,900.0 2341,Austria,60.6,30.3,500,700.0,700.0 7352,Japan,70.7,80.8,500,750.0,800.0 7352,China,70.7,80.8,300,550.0,600.0 
 import pandas as pd import numpy as np csv_file1 = '/home/Jian/Downloads/stack_flow_bundle/Data_repository/master_lac_Test.csv' csv_file2 = '/home/Jian/Downloads/stack_flow_bundle/Data_repository/lat_lon_master.csv' df1 = pd.read_csv(csv_file1).set_index('Ids') Out[53]: 00:00:00 00:30:00 00:45:00 Ids 1234 1000 500 100 8435 5243 300 200 2341 563 400 400 7352 345 500 600 # need to sort index in file 2 df2 = pd.read_csv(csv_file2).set_index('Ids').sort_index() Out[81]: Name lat lon 00:00:00 Ids 1234 London 40.4 10.1 500 1234 Prague 40.4 10.1 500 2341 NewYork 60.6 30.3 700 2341 Austria 60.6 30.3 700 7352 Japan 70.7 80.8 500 7352 China 70.7 80.8 500 8435 Paris 50.5 20.2 400 8435 Berlin 50.5 20.2 400 # df1 and df2 has a duplicated column 00:00:00, use df1 without 1st column temp = df2.join(df1.iloc[:, 1:]) Out[55]: Name lat lon 00:00:00 00:30:00 00:45:00 Ids 1234 London 40.4 10.1 500 500 100 1234 Prague 40.4 10.1 500 500 100 2341 NewYork 60.6 30.3 700 400 400 2341 Austria 60.6 30.3 700 400 400 7352 Japan 70.7 80.8 500 500 600 7352 China 70.7 80.8 500 500 600 8435 Paris 50.5 20.2 400 300 200 8435 Berlin 50.5 20.2 400 300 200 # do the division by number of occurence of each Ids # and add column 00:00:00 def my_func(group): num_obs = len(group) # process with column name after 00:30:00 (inclusive) group.iloc[:,4:] = (group.iloc[:,4:]/num_obs).add(group.iloc[:,3], axis=0) return group result = temp.groupby(level='Ids').apply(my_func) Out[104]: Name lat lon 00:00:00 00:30:00 00:45:00 Ids 1234 London 40.4 10.1 500 750 550 1234 Prague 40.4 10.1 500 750 550 2341 NewYork 60.6 30.3 700 900 900 2341 Austria 60.6 30.3 700 900 900 7352 Japan 70.7 80.8 500 750 800 7352 China 70.7 80.8 500 750 800 8435 Paris 50.5 20.2 400 550 500 8435 Berlin 50.5 20.2 400 550 500 

Мое предложение состоит в том, чтобы переформатировать ваши данные так, чтобы это было так:

 Ids,ref0,current_time,ref1 1234,1000,None,None 8435,5243,None,None 2341,563,None,None 7352,345,None,None 

Затем после вашего «первого препроцесса» это будет следующим:

 Ids,ref0,time,ref1 1234,1000,None,None 8435,5243,None,None 2341,563,None,None 7352,345,None,None 1234,1000,00:30:00,500 8435,5243,00:30:00,300 2341,563,00:30:00,400 7352,345,00:30:00,500 

, , , и так далее. Идея заключается в том, что вы должны сделать один столбец для хранения информации о времени, а затем для каждого препроцесса вставить новые данные в новые строки и дать этим строкам значение в столбце времени, указывающем, с какого периода времени они происходят. Вы можете или не хотите сохранять начальные строки с «None» в этой таблице; возможно, вы просто хотите начать с значений «00:30:00» и сохранить «мастер-идентификаторы» в отдельном файле.

Я не полностью ref1 , как вы вычисляете новые значения ref1 , но дело в том, что это может значительно упростить вашу жизнь. В общем случае вместо добавления неограниченного количества новых столбцов может быть гораздо приятнее добавить один новый столбец, значения которого будут тогда значениями, которые вы собираетесь использовать в качестве заголовков для открытых столбцов открытого типа.

  • Pandas - условная вероятность данного конкретного b
  • Pandas импортирует CSV и файл Excel.
  • Превращение кадра данных Pandas в массив и оценка множественной линейной регрессионной модели
  • python selenium очищает тём
  • python pandas dataframe head () ничего не отображает
  • Как выполнить итерацию по файловому фрейму pandas multiindex с использованием индекса
  • Фильтрация строк данных данных, если значение в столбце указано в списке значений
  • групповые значения, относящиеся к np.nan в интервалах
  • Векторизация блока данных Pandas для Scikit-Learn
  • Преобразование текстовых данных из объекта запроса в dataframe с помощью pandas
  • Вложенный словарь для MultiIndex pandas DataFrame (3 уровня)
  •  
    Interesting Posts for Van-Lav

    Установить выделение жирным шрифтом выделенного текста с помощью тегов

    Преобразование данных в Pandas в строку csv

    Объединение 2 .csv-файлов общим столбцом

    Как остановить всех пауков и двигатель сразу после выполнения условия в конвейере?

    Запрос однострочного DataFrame с условными обозначениями AND'ed

    как остановить цикл for

    Сброс цветового цикла в Matplotlib

    При чтении огромного файла HDF5 с «pandas.read_hdf ()», почему я все еще получаю MemoryError, хотя я читаю куски, указав chunksize?

    Как преобразовать определенный формат CSV в JSON с помощью Python

    Как я могу профилировать приложение с поддержкой SQLAlchemy?

    Django: создание {% block "div"%} условно с условным {% extends%}

    Xpath vs DOM vs BeautifulSoup vs lxml vs other Какой самый быстрый подход к анализу веб-страницы?

    Юникодное регулярное выражение для соответствия символьному классу китайских символов

    параметризованные запросы в oursql

    Есть ли IDE / утилита для реорганизации импорта Python * для использования стандартного синтаксиса module.member?

    Python - лучший язык программирования в мире.