我有以下代码
#!/usr/bin/env ruby
require 'daru'
require 'json'
netmasks = Regexp.union([/^192\.168\..*$/, /^10\..*$/].concat((16..24).map { |n| /172\.#{n}\..*/ }))
# Do magic
raw_df = Daru::DataFrame.from_csv('eqn-editor-logs-20160724.csv', col_sep: ';') \
.filter(:row) { |row|
# Filter out local IP addresses, these are likely to be internal users
!(row['ip_address'] =~ netmasks)
}.recode(:row) { |row|
# Parse various data for later consumption
row['event_details'] = JSON.parse(row['event_details'])
row['timestamp'] = Date.parse(row['timestamp'])
row # Remember to actually return the row
}
eqn_editor_events = raw_df.filter(:row) { |row| row['event_type'] == 'EQN_EDITOR_LOG' }
eqn_editor_answers = eqn_editor_events.map(:row) do |eq_row|
raw_df.filter(:row) do |ans_row|
ans_row['question_id'] == eq_row['question_id'] && \
ans_row['user_id'] == eq_row['user_id'] && \
ans_row['timestamp'] > eq_row['timestamp']
end
end
但是,eqn_editor_answers
是兼容DataFrame
的数组(兼容,因为它们具有相同的列),我希望它是一个包含相同列的DataFrame
行。我该怎么做?
编辑我可以修改map
后面的each
块,其中我将这些行添加到现有DataFrame
(最终我需要让eqn_editor_events
和eqn_editor_answers
的联合像这样
eqn_editor_events.map(:row) do |eq_row|
raw_df.filter(:row) do |ans_row|
ans_row['question_id'] == eq_row['question_id'] && \
ans_row['user_id'] == eq_row['user_id'] && \
ans_row['timestamp'] > eq_row['timestamp']
end
end.each do |row|
eqn_editor_events.add_row row
end
然后我可以亲吻功能风格再见:)所以我想我的问题是如何尽可能接近功能风格呢?
编辑2 事实上,要么我搞砸了,要么这种方法不起作用,因为我得到了一大堆空行。