сохраняя ключ соединения в качестве первого столбца объединенного блока данных [duplicate]

Я помещаю превосходный ответ JLBorges на аналогичный вопрос дословно из cplusplus.com, так как это наиболее краткое объяснение, которое я прочитал по этому вопросу.

] В шаблоне, который мы пишем, есть два типа имен, которые можно использовать - зависимые имена и не зависимые имена. Зависимое имя - это имя, которое зависит от параметра шаблона; неизменяемое имя имеет то же значение, независимо от параметров шаблона.

Например:

template< typename T > void foo( T& x, std::string str, int count )
{
    // these names are looked up during the second phase
    // when foo is instantiated and the type T is known
    x.size(); // dependant name (non-type)
    T::instance_count ; // dependant name (non-type)
    typename T::iterator i ; // dependant name (type)

    // during the first phase, 
    // T::instance_count is treated as a non-type (this is the default)
    // the typename keyword specifies that T::iterator is to be treated as a type.

    // these names are looked up during the first phase
    std::string::size_type s ; // non-dependant name (type)
    std::string::npos ; // non-dependant name (non-type)
    str.empty() ; // non-dependant name (non-type)
    count ; // non-dependant name (non-type)
}

То, что зависит от зависимого имени, может быть чем-то другим для каждого конкретного экземпляра шаблона. Как следствие, шаблоны C ++ подвержены «двухфазному поиску имен». Когда шаблон сначала анализируется (до того, как выполняется какое-либо создание), компилятор просматривает не зависящие имена. Когда происходит конкретное создание шаблона, параметры шаблона известны к тому времени, и компилятор ищет зависимые имена.

На первом этапе анализатор должен знать, является ли зависимое имя именем типа или имени не-типа. По умолчанию зависимым именем считается имя не-типа.

Использовать ключевое слово typename только в объявлениях шаблонов и определениях, приведенных ниже.


у вас есть квалифицированное имя, которое относится к типу и зависит от параметра шаблона.

34
задан Leb 13 November 2015 в 01:24
поделиться

4 ответа

Мы можем использовать ix для переупорядочения путем передачи списка:

In [27]:
# get a list of columns
cols = list(df)
# move the column to head of list using index, pop and insert
cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[27]:
['Mid', 'Net', 'Upper', 'Lower', 'Zsore']
In [28]:
# use ix to reorder
df = df.ix[:, cols]
df
Out[28]:
                      Mid Net  Upper   Lower  Zsore
Answer_option                                      
More_than_once_a_day    2  0%  0.22%  -0.12%     65
Once_a_day              3  0%  0.32%  -0.19%     45
Several_times_a_week    4  2%  2.45%   1.10%     78
Once_a_week             6  1%  1.63%  -0.40%     65

Другой метод - взять ссылку на столбец и вставить его спереди:

In [39]:
mid = df['Mid']
df.drop(labels=['Mid'], axis=1,inplace = True)
df.insert(0, 'Mid', mid)
df
Out[39]:
                      Mid Net  Upper   Lower  Zsore
Answer_option                                      
More_than_once_a_day    2  0%  0.22%  -0.12%     65
Once_a_day              3  0%  0.32%  -0.19%     45
Several_times_a_week    4  2%  2.45%   1.10%     78
Once_a_week             6  1%  1.63%  -0.40%     65

Вы также можете использовать loc для достижения того же результата, что и ix в устаревших версиях панды из 0.20.0 :

df = df.loc[:, cols]
49
ответ дан EdChum 18 August 2018 в 07:41
поделиться
  • 1
    существует ли способ не определять все колоссы? есть способ сделать что-то вроде «move» (df ['Mid], 0) & quot; – Boosted_d16 4 August 2014 в 16:36
  • 2
    Я опубликовал динамический метод, который, как мне кажется, достигает того, что вы хотите – EdChum 4 August 2014 в 16:37
  • 3
    Оба метода работают :). Могу ли я добавить твист - что, если & quot; Mid & quot; был на уровне 2 многоуровневой таблицы данных? – Boosted_d16 4 August 2014 в 16:48
  • 4
    Обратите внимание, что .ix устарел в pandas 20.x pandas.pydata.org/pandas-docs/stable/whatsnew.html#deprecate-ix – Aziz Alto 27 June 2017 в 05:41
  • 5
    @AzizAlto обновили, спасибо за комментарий – EdChum 27 June 2017 в 11:10

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

cols = df.columns.tolist()
n = int(cols.index('Mid'))
cols = [cols[n]] + cols[:n] + cols[n+1:]
df = df[cols]
1
ответ дан Bhagabat Behera 18 August 2018 в 07:41
поделиться
  • 1
    в идеале, объясните свой ответ и что делает его хорошим решением, и не только публикуйте кусок кода. Вы рискуете спуститься вниз – Tjebo 24 June 2018 в 12:24

Мне не понравилось, как я должен был явно указать все остальные столбцы в других решениях, чтобы это работало лучше всего для меня. Хотя это может быть медленным для больших фреймов данных ...?

df.set_index('Mid').reset_index()

4
ответ дан citynorman 18 August 2018 в 07:41
поделиться

Вы можете использовать функцию df.reindex () в пандах. df есть

                      Net  Upper   Lower  Mid  Zsore
Answer option                                      
More than once a day  0%  0.22%  -0.12%    2     65
Once a day            0%  0.32%  -0.19%    3     45
Several times a week  2%  2.45%   1.10%    4     78
Once a week           1%  1.63%  -0.40%    6     65

определить список имен столбцов

cols = df.columns.tolist()
cols
Out[13]: ['Net', 'Upper', 'Lower', 'Mid', 'Zsore']

переместить имя столбца туда, где вы хотите

cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[16]: ['Mid', 'Net', 'Upper', 'Lower', 'Zsore']

, затем использовать df.reindex() для изменения порядка

df = df.reindex(columns= cols)

out put: df

                      Mid  Upper   Lower Net  Zsore
Answer option                                      
More than once a day    2  0.22%  -0.12%  0%     65
Once a day              3  0.32%  -0.19%  0%     45
Several times a week    4  2.45%   1.10%  2%     78
Once a week             6  1.63%  -0.40%  1%     65
22
ответ дан Sachinmm 18 August 2018 в 07:41
поделиться
  • 1
    Это сделало бы очень аккуратные pandas intrinsic - переместите столбец «Y» в положение n ... – jtlz2 8 December 2017 в 09:50
Другие вопросы по тегам:

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