Подсчитать значения в столбце и присвоить строке - PullRequest
1 голос
/ 03 августа 2020

У меня есть такой фрейм данных:

    dT_sampleTime   steps      
0        0.002      0.001
1        0.004      0.002
2        0.004      0.003  
3        0.004      0.004  
4        0.003      0.005  
5        0.007      0.006
6        0.001      0.007 

, и я хочу подсчитать, как часто значение шагов встречается в столбце dT_sampleTime, и создать новую абсолютную частоту столбца.

    dT_sampleTime   steps    absolute frequency    
0       0.002       0.001            1              
1       0.004       0.002            1
2       0.004       0.003            1
3       0.004       0.004            3
4       0.003       0.005            0
5       0.007       0.006            0
6       0.001       0.007            1

Моя идея была примерно такой:

df['absolute frequency'] = df.groupby(df['steps'],df['dT_sampleTime']).count

Ответы [ 2 ]

1 голос
/ 03 августа 2020

map столбец «шаги» с value_counts столбца «dt_sampleTime». Затем заполните отсутствующие значения 0.

df['absolute frequency'] = (df['steps'].map(df['dT_sampleTime'].value_counts())
                                       .fillna(0, downcast='infer'))

#   dT_sampleTime  steps  absolute frequency
#0          0.002  0.001                   1
#1          0.004  0.002                   1
#2          0.004  0.003                   1
#3          0.004  0.004                   3
#4          0.003  0.005                   0
#5          0.007  0.006                   0
#6          0.001  0.007                   1

При сопоставлении с серией он использует индекс для поиска подходящего значения. Серия value_counts равна

df['dT_sampleTime'].value_counts()
#0.004    3
#0.007    1
#0.001    1
#0.002    1
#0.003    1
#Name: dT_sampleTime, dtype: int64

, поэтому 0.004 в столбцах шагов, например, переходит в 3.

0 голосов
/ 03 августа 2020
  • L oop по df
  • Используйте значение steps каждой строки в качестве фильтра, применяемого к dT_sampleTime столбцу
  • Количество строк в результирующий DataFrame - это абсолютная частота текущего значения steps в столбце dt_sampleTime
  • Добавить это значение в текущую строку под полем absolute frequency
for i, row in df.iterrows():
     df.loc[i, 'absolute frequency'] = len(df[df['dT_sampleTime'] == row['steps']])

Результат df на основе примера, приведенного в вашем исходном вопросе:

   dT_sampleTime  steps  absolute frequency
0          0.002  0.001                 1.0
1          0.004  0.002                 1.0
2          0.004  0.003                 1.0
3          0.004  0.004                 3.0
4          0.003  0.005                 0.0
5          0.007  0.006                 0.0
6          0.001  0.007                 1.0

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...