提取字符串,将它们计数并转置为数据框中的列
Exctracting strings , counting and transposing them as columns in a dataframe
有一个包含 2 列的 pandas 数据框:tag
和 message
:
tag | message
["string1","sttring2"] | some text
["string","string3"] | another text
["string2"] | another another text
我想为多标签分类构建一个数据集,所以我需要从 tag
中提取所有不同的 strings
,因为它们是我的标签。
我需要的:
我需要在标签中转置这个包含大约 40 个不同 strings
的列表,然后插入每个相对于消息列的计数。
所以最终的数据框应该是这样的:
tag | message string string1 string2 string3
["string1","string2"] | some text 0 1 1 0
["string","string3"] | another text 1 0 0 1
["string2"] | another another text 0 0 1 0
请注意,new_df
数据框必须有 2 个原始列 + ~40 个新列,因为标签列中大约有 40 个不同的字符串。
我如何在 Julia 中执行此操作
方法有很多种,举两个例子:
julia> df = DataFrame(tag=[["string1","sttring2"], ["string","string3"], ["string2"]],
message=["some text", "another text", "another another text"])
3×2 DataFrame
Row │ tag message
│ Array… String
─────┼───────────────────────────────────────────────
1 │ ["string1", "sttring2"] some text
2 │ ["string", "string3"] another text
3 │ ["string2"] another another text
julia> [df DataFrame([col => in.(col, df.tag) for col in foldl(union!, df.tag, init=Set{String}())])]
3×7 DataFrame
Row │ tag message string string2 string3 string1 sttring2
│ Array… String Bool Bool Bool Bool Bool
─────┼────────────────────────────────────────────────────────────────────────────────────────────
1 │ ["string1", "sttring2"] some text false false false true true
2 │ ["string", "string3"] another text true false true false false
3 │ ["string2"] another another text false true false false false
julia> transform(df, [:tag => ByRow(x -> in(col, x)) => col for col in foldl(union!, df.tag, init=Set{String}())])
3×7 DataFrame
Row │ tag message string string2 string3 string1 sttring2
│ Array… String Bool Bool Bool Bool Bool
─────┼────────────────────────────────────────────────────────────────────────────────────────────
1 │ ["string1", "sttring2"] some text false false false true true
2 │ ["string", "string3"] another text true false true false false
3 │ ["string2"] another another text false true false false false
有一个包含 2 列的 pandas 数据框:tag
和 message
:
tag | message
["string1","sttring2"] | some text
["string","string3"] | another text
["string2"] | another another text
我想为多标签分类构建一个数据集,所以我需要从 tag
中提取所有不同的 strings
,因为它们是我的标签。
我需要的:
我需要在标签中转置这个包含大约 40 个不同 strings
的列表,然后插入每个相对于消息列的计数。
所以最终的数据框应该是这样的:
tag | message string string1 string2 string3
["string1","string2"] | some text 0 1 1 0
["string","string3"] | another text 1 0 0 1
["string2"] | another another text 0 0 1 0
请注意,new_df
数据框必须有 2 个原始列 + ~40 个新列,因为标签列中大约有 40 个不同的字符串。
我如何在 Julia 中执行此操作
方法有很多种,举两个例子:
julia> df = DataFrame(tag=[["string1","sttring2"], ["string","string3"], ["string2"]],
message=["some text", "another text", "another another text"])
3×2 DataFrame
Row │ tag message
│ Array… String
─────┼───────────────────────────────────────────────
1 │ ["string1", "sttring2"] some text
2 │ ["string", "string3"] another text
3 │ ["string2"] another another text
julia> [df DataFrame([col => in.(col, df.tag) for col in foldl(union!, df.tag, init=Set{String}())])]
3×7 DataFrame
Row │ tag message string string2 string3 string1 sttring2
│ Array… String Bool Bool Bool Bool Bool
─────┼────────────────────────────────────────────────────────────────────────────────────────────
1 │ ["string1", "sttring2"] some text false false false true true
2 │ ["string", "string3"] another text true false true false false
3 │ ["string2"] another another text false true false false false
julia> transform(df, [:tag => ByRow(x -> in(col, x)) => col for col in foldl(union!, df.tag, init=Set{String}())])
3×7 DataFrame
Row │ tag message string string2 string3 string1 sttring2
│ Array… String Bool Bool Bool Bool Bool
─────┼────────────────────────────────────────────────────────────────────────────────────────────
1 │ ["string1", "sttring2"] some text false false false true true
2 │ ["string", "string3"] another text true false true false false
3 │ ["string2"] another another text false true false false false