如何连接 Julia 中两个数据框中的列和求和值?
How can I concatenate columns and sum values from two data frames in Julia?
我有两个数据框(左边的数据框是1,另一个是2),我想根据以下条件得到最终的数据框:
1.Group Col2 by Col1,例如A 566,788,888,999,1212
2.In data frame 2, 可以查到(Group A) 788,888,999,1212所以想保留,而566不在data frame 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
这是你想要的吗?
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
拥有您要求的数据。我没有针对性能对其进行优化 - 执行速度与您相关吗?
我有两个数据框(左边的数据框是1,另一个是2),我想根据以下条件得到最终的数据框:
1.Group Col2 by Col1,例如A 566,788,888,999,1212
2.In data frame 2, 可以查到(Group A) 788,888,999,1212所以想保留,而566不在data frame 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
这是你想要的吗?
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
拥有您要求的数据。我没有针对性能对其进行优化 - 执行速度与您相关吗?