gpt4 book ai didi

python - 热将多个数据帧转换为特定格式?

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:19 24 4
gpt4 key购买 nike

我有两个数据框:

df1 = pd.DataFrame(
{
"database": {
"0": "database1",
"1": "database1",
"2": "database1",
},
"table": {
"0": "table A",
"1": "table B",
"2": "table C",
},
"node": {
"0": "node1",
"1": "node1",
"2": "node1",
},
"value": {
"0": "A1",
"1": "B1",
"2": "C1",
}
})


df2 = pd.DataFrame(
{
"database": {
"0": "database1",
"1": "database1",
"2": "database1",
},
"table": {
"0": "table B",
"1": "table C",
"2": "table D",
},
"node": {
"0": "node2",
"1": "node2",
"2": "node2",
},
"value": {
"0": "B2",
"1": "C2",
"2": "D2",
}
})
df2

df1
database table node value
0 database1 table A node1 A1
1 database1 table B node1 B1
2 database1 table C node1 C1

df2
database table node value
0 database1 table B node2 B2
1 database1 table C node2 C2
2 database1 table D node2 D2

如何将这两个数据帧转换为这种格式?

enter image description here

Stackoverflow 不允许我提交到期问题:“看起来您的帖子主要是代码;请添加更多详细信息。”。我添加此文本只是为了进一步传递。

最佳答案

使用concat将 DataFrame 连接在一起,然后使用 DataFrame.pivot_table使用聚合函数 first 返回三元组的第一个值 table,database,node:

df = (pd.concat([df1, df2])
.pivot_table(index='table',
columns=['database','node'],
values='value',
aggfunc='first'))
print (df)

database database1
node node1 node2
table
table A A1 NaN
table B B1 B2
table C C1 C2
table D NaN D2

如果可能通过三元组复制 table,database,node 然后使用 join 聚合以避免丢失数据:

df1 = pd.DataFrame(
{
"database": {
"0": "database1",
"1": "database1",
"2": "database1",
},
"table": {
"0": "table A",
"1": "table A",
"2": "table C",
},
"node": {
"0": "node1",
"1": "node1",
"2": "node1",
},
"value": {
"0": "A1",
"1": "B1",
"2": "C1",
}
})

print (df1)
database table node value
0 database1 table A node1 A1 <- duplicated triple
1 database1 table A node1 B1 <- duplicated triple
2 database1 table C node1 C1

df = (pd.concat([df1, df2])
.pivot_table(index='table',
columns=['database','node'],
values='value',
aggfunc=','.join))
print (df)
database database1
node node1 node2
table
table A A1,B1 NaN
table B NaN B2
table C C1 C2
table D NaN D2

如果对重复的三元组使用 first,则只返回第一个值:

df = (pd.concat([df1, df2])
.pivot_table(index='table',
columns=['database','node'],
values='value',
aggfunc='first'))
print (df)
database database1
node node1 node2
table
table A A1 NaN <- B1 is lost
table B NaN B2
table C C1 C2
table D NaN D2

关于python - 热将多个数据帧转换为特定格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com