如何将daru DataFrame数组合并到一个DataFrame中?

时间:2016-07-26 15:19:59

标签: ruby dataframe

我有以下代码

#!/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_eventseqn_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 事实上,要么我搞砸了,要么这种方法不起作用,因为我得到了一大堆空行。

0 个答案:

没有答案