Как можно объединить столбцы и суммировать значения из двух фреймов данных в Julia? - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть два фрейма данных (левый фрейм данных равен 1, другой - 2), и я хочу получить окончательный фрейм данных на основе следующих условий:

1.Группа Col2 по Col1, например, A 566 788 888 999,1212

2. Во фрейме данных 2 я могу обнаружить, что (Группа A) 788 888 999,1212, поэтому я хочу сохранить его, пока 566 отсутствует в фрейме данных 2, поэтому проигнорируйте его.

3 Сумма Сумма для всех членов в кадрах данных 1 и 2, например, A-788 (2), A-888 (3), A-999 (4), A-1212 (5),788-888 (12), 999-1212 (13), т. Е. 2 ​​+ 3 + 4 + 5 + 12 + 13 = 39

Col1    Col2  Total        Col3   Col4   Total  
 A      566    1            788   888      12
 A      788    2            999   1212     13
 A      888    3            700   707      14
 A      999    4            701   702      15
 A      1212   5
 B      700    6
 B      701    7
 B      702    8
 B      703    9
 B      704    10
 B      705    11

Ожидаемый результат

ResultCol1    ResultCol2           ResultTotal
  A           788,888,999,1212        39
  B           700,701,702             50

1 Ответ

0 голосов
/ 03 декабря 2018

Это то, что вы хотите?

using DataFrames

m1 = ["A"      566    1
      "A"      788    2
      "A"      888    3
      "A"      999    4
      "A"      1212   5
      "B"      700    6
      "B"      701    7
      "B"      702    8
      "B"      703    9
      "B"      704    10
      "B"      705    11]

m2 = [788   888      12
      999   1212     13
      700   707      14
      701   702      15]

df1 = DataFrame(m1, [:Col1, :Col2, :Total])
df2 = DataFrame(m2, [:Col3, :Col4, :Total])
df1f = filter(x -> x.Col2 in df2.Col3 || x.Col2 in df2.Col4, df1)
df3 = by(df1f, :Col1) do x
          DataFrame(Col2=Tuple(x.Col2), Total=sum(x.Total))
      end
for r3 in eachrow(df3), r2 in eachrow(df2)
    if any(in.([r2.Col3, r2.Col4], [r3.Col2]))
        r3.Total += r2.Total
    end
end

А теперь df3 содержит данные, которые вы запрашивали.Я не оптимизировал его для производительности - для вас важна скорость выполнения?

...