Почему сгруппированный фрейм данных выдает ключ и данные в цикле for, но не работает с использованием map()?

#python #pandas

#python #pandas

Вопрос:

Рассмотрим приведенный ниже пример использования: когда я использую цикл for, я могу получить доступ как к ключу, так и к сгруппированным данным, но при попытке абстрагировать цикл for от использования map () Я получаю следующую ошибку:

 raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'], 
        'age': [42, 52, 36, 24, 73], 
        'preTestScore': [4, 24, 31, 2, 3],
        'postTestScore': [25, 94, 57, 62, 70]}

df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'preTestScore', 'postTestScore'])
df_grouped = df.groupby('last_name')

for key, group in df_grouped:
  print(key, group)

map(lambda x,y: sys.stdout.write(x, y), df_grouped)

>>> TypeError: <lambda>() takes exactly 2 arguments (1 given)
  

Вот мой реальный пример. У меня нет воспроизводимого набора данных, который я мог бы опубликовать, но я пытаюсь создать линейный график и посмотреть, не очистит ли map мой код немного.

 grouped_sim = raw_exprmt_dat.query('n > 1').groupby('model_id')
grouped_exp = raw_exprmt_dat.query('n == 1').groupby('model_id')

for key, group in grouped_sim:
  plt.plot(group['X'], group['Y'], label=key, color=color_map[key])
  if key == '365FGR':
    for key, group in grouped_exp:
      plt.plot(group['X'], group['Y'], 's', label=key, color=color_map[key], markersize=12)
  

Комментарии:

1. Что именно вы пытаетесь сделать с последней строкой?

2. @Efran производит тот же эффект, что и цикл for. print() не работает в лямбда-функциях для Python 2.7 .

3. Ваша цель — только печатать? Или вы пытаетесь каким-то образом объединить фрейм данных?

4. На самом деле я пытаюсь создать линейный график с несколькими группами в моем реальном случае. Я пришел из R и действительно привык использовать map в своем программировании. Я просто пытаюсь посмотреть, можно ли имитировать подобное поведение в python.

5. map невидим. Насколько мне известно, вы не можете получить промежуточные значения, потому что теперь он создает итератор. Это либо работает, либо нет.