Python: применить код ко всему столбцу данных

Хотя есть много хороших объяснений выше, я пропускаю практический способ разделения шаблонов на заголовок и тело. Моя главная задача - избегать перекомпиляции всех пользователей шаблонов, когда я меняю свое определение. Все экземпляры шаблонов в корпусе шаблона не являются жизнеспособным решением для меня, поскольку автор шаблона может не знать всех, если его использование и пользователь шаблона могут не иметь права его модифицировать. Я принял следующий подход, который также работает и для более старых компиляторов (gcc 4.3.4, aCC A.03.13).

Для каждого использования шаблона в его собственном файле заголовка (сгенерированном из модели UML) имеется typedef, , Его тело содержит экземпляр (который заканчивается в библиотеке, которая связана в конце). Каждый пользователь шаблона включает этот файл заголовка и использует typedef.

Схематический пример:

MyTemplate.h:

#ifndef MyTemplate_h
#define MyTemplate_h 1

template <class T>
class MyTemplate
{
public:
  MyTemplate(const T& rt);
  void dump();
  T t;
};

#endif

MyTemplate.cpp:

#include "MyTemplate.h"
#include <iostream>

template <class T>
MyTemplate<T>::MyTemplate(const T& rt)
: t(rt)
{
}

template <class T>
void MyTemplate<T>::dump()
{
  cerr << t << endl;
}

MyInstantiatedTemplate.h:

#ifndef MyInstantiatedTemplate_h
#define MyInstantiatedTemplate_h 1
#include "MyTemplate.h"

typedef MyTemplate< int > MyInstantiatedTemplate;

#endif

MyInstantiatedTemplate.cpp:

#include "MyTemplate.cpp"

template class MyTemplate< int >;

main.cpp:

#include "MyInstantiatedTemplate.h"

int main()
{
  MyInstantiatedTemplate m(100);
  m.dump();
  return 0;
}

Таким образом, нужно будет перекомпилировать только экземпляры шаблонов, не всех пользователей шаблонов (и зависимостей).

1
задан Muzz 3 March 2019 в 18:21
поделиться

2 ответа

Попробуйте:

def func(x):
    x['col2'] = np.arange(0, len(x['col1'])*100, 100)
    return x
df.apply(lambda x: func(x) , axis=1)
0
ответ дан hacker315 3 March 2019 в 18:21
поделиться

Попробуйте это, если вы хотите, чтобы умножение было основано на каждой уникальной строке (факторизовано), для дублированных элементов списка это вернет дублированные результаты:

df['col2']=df.col1.transform(lambda x: pd.factorize(x)[0]*100)

Или предложение @jezrael:

df.col1.apply(lambda x: np.arange(len(x))*100)


print(df)

                                                   col1  \
row1  [0.0, 6.33839991, 3.93961207, 5.27702178, 8.27...   
row2          [0.0, 5.93961207, 4.27702178, 4.12702178]   
row3  [0.0, 6.44428501, 3.93961207, 8.27702178, 4.27...   

                                   col2  
row1  [0, 100, 200, 300, 400, 500, 600]  
row2                 [0, 100, 200, 300]  
row3            [0, 100, 200, 300, 400] 
0
ответ дан anky_91 3 March 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: