Dataframe loc из серии, python [duplicate]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

6
задан gggritso 18 July 2014 в 21:17
поделиться

3 ответа

Вы можете использовать lookup , например

>>> i = pd.Series(['a', 'a', 'b', 'c', 'b'])
>>> df.lookup(i.index, i.values)
array([ 1,  4,  8, 12, 14])

, где i.index может отличаться от range(len(i)), если вы хотите.

15
ответ дан DSM 19 August 2018 в 18:10
поделиться
  • 1
    Это фантастика, спасибо! Возможно ли также присвоить этим индексам? – gggritso 18 July 2014 в 22:44
  • 2
    Вы можете назначать, но ТОЛЬКО, когда кадр является единственным dtype (как сейчас). df.unstack().loc[zip(i.values,i.index)] = [1,2,3,4,5]. И вы должны соответствовать длине с обеих сторон (вы также можете выбрать этот синтаксис); см. эту проблему: github.com/pydata/pandas/issues/7138 – Jeff 18 July 2014 в 22:57
  • 3
    Если вы хотите добавить индекс, сделайте серию: pd.Series(df.lookup(i.index, i.values), index=i.index) – user394430 29 November 2016 в 19:30

Вы всегда можете использовать понимание списка:

[df.loc[idx, col] for idx, col in enumerate(['a', 'a', 'b', 'c', 'b'])]
0
ответ дан Gregor 19 August 2018 в 18:10
поделиться

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

df.values[arange(5),[0,0,1,2,1]]

out: array([ 1,  4,  8, 12, 14])

Это будет быть намного более эффективными, чтобы понимать список или другие явные итерации.

1
ответ дан mdurant 19 August 2018 в 18:10
поделиться
Другие вопросы по тегам:

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