Панды: генерировать столбец Dataframe, значения которого зависят от другого столбца кадра данных - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь сгенерировать pandas Dataframe, где столбец будет иметь числовые значения, основанные на значениях столбца в другом dataframe.Ниже приведен пример: я хочу сгенерировать другой фрейм данных на основе столбца фрейма данных df_

ipdb> df_ = pd.DataFrame({'c1':[False, True, False, True]})
ipdb> df_
      c1
0  False
1   True
2  False
3   True

При использовании df_ другой фрейм данных df1 создается со столбцами, как показано ниже.

ipdb> df1
   col1  col2
0     0   NaN
1     1   0
2     2   NaN
3     3   1

Здесь,У 'col1' есть нормальные значения индекса, а у 'c1' есть NaN в строках, где было значение False в df_, и последовательно увеличивающиеся значения, где 'c1' равно True.

Чтобы сгенерировать этот фрейм данных, я попробовал ниже:

ipdb> df_[df_['c1']==True].reset_index().reset_index()
   level_0  index    c1
0        0      1  True
1        1      3  True

Однако я считаю, что должен быть лучший способ сгенерировать фрейм данных с двумя столбцами, как в df1.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

другой способ решить эту проблему,

df.loc[df['c1'],'col2']=range(len(df[df['c1']]))

Вывод:

      c1  col2
0  False   NaN
1   True   0.0
2  False   NaN
3   True   1.0
0 голосов
/ 20 ноября 2018

Я думаю, вам нужно cumsum и вычесть 1 для начала отсчета с 0:

df_ = pd.DataFrame({'c1':[False, True, False, True]})

df_['col2'] = df_.loc[df_['c1'], 'c1'].cumsum().sub(1)
print (df_)
      c1  col2
0  False   NaN
1   True   0.0
2  False   NaN
3   True   1.0

Другим решением является подсчет числа True значений по sum с numpy.arange и присвоение обратно отфильтрованному DataFrame:

df_.loc[df_['c1'],'col2']= np.arange(df_['c1'].sum())
print (df_)
      c1  col2
0  False   NaN
1   True   0.0
2  False   NaN
3   True   1.0

Подробности :

print (df_['c1'].sum())
2

print (np.arange(df_['c1'].sum()))
[0 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...