Как я передаю несколько аргументов рубиновому методу как массив?

Вы можете groupby date и использовать transform , чтобы добавить столбец с sum цен на группу:

df['cumsprice'] = df.groupby('date').price.transform('sum')

   id  price  hour  minute   date  cumsprice
0   1     10     3       7  01/11         19
1   2      4     3      59  01/11         19
2   3      5     2      21  01/11         19
3   4      6     3      47  02/09          6
4   5      1     4      28  02/04          1

Обновление

Обновление после изменения ожидаемого решения. Чтобы сгруппировать по последовательным датам, которые равны, вы можете создать собственный группировщик, проверив, на каких строках изменяются даты, и взяв cumsum из них:

g = df.date.ne(df.date.shift(1))
df['cumprice'] = df.groupby(g.cumsum()).price.transform('sum')    

print(df)
   id  price  hour  minute   date  cumsprice  cumprice
0   1     10     3       7  01/11         31      19.0
1   2      4     3      59  01/11         31      19.0
2   3      5     2      21  01/11         31      19.0
3   4      6     3      47  02/09          6       6.0
4   5      1     4      28  02/04          1       1.0
5   6     12     5      50  01/11         31      12.0

63
задан Bill the Lizard 27 January 2014 в 17:04
поделиться

2 ответа

Ruby хорошо обрабатывает несколько аргументов.

Вот довольно хороший пример.

def table_for(collection, *args)
  p collection: collection, args: args
end

table_for("one")
#=> {:collection=>"one", :args=>[]}

table_for("one", "two")
#=> {:collection=>"one", :args=>["two"]}

table_for "one", "two", "three"
#=> {:collection=>"one", :args=>["two", "three"]}

table_for("one", "two", "three")
#=> {:collection=>"one", :args=>["two", "three"]}

table_for("one", ["two", "three"])
#=> {:collection=>"one", :args=>[["two", "three"]]}

(Вывод вырезан и вставлен от irb)

90
ответ дан 24 November 2019 в 16:14
поделиться

Просто назовите это так:

table_for(@things, *args)

Оператор splat ( * ) выполнит эту работу, без необходимости изменять метод.

57
ответ дан 24 November 2019 в 16:14
поделиться
Другие вопросы по тегам:

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