python - 将多个数据帧转换为特定格式很热?
问题描述
我有两个数据框:
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
如何将这两个数据帧转换为这种格式?
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
则使用聚合 byjoin
以避免丢失数据:
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
推荐阅读
- matlab - 需要为以下条件编写一组线性方程:
- javascript - Javascript 正则表达式将文本字段限制为仅数字和仅 10 或 12 位数字
- javascript - Reactjs Usestate钩子没有将数据属性发送到数据库
- c# - Raycast 仅在我以中等速度移动时才有效?
- hosting - 在 Netlify 上构建 Hugo 站点时是否需要使用“--cleanDestinationDir”?
- sql - Postgresql - 计算 ILIKE 查询结果中子字符串的实例数
- github - Github wiki 在显示旧版本
- c++ - 在 Visual Studio 2019 中无法打开文件“fltkd.lib”错误
- android - 具有 RecyclerView 的页面中 Persistent 或 Standard BottomSheet 的奇怪滚动行为和可见性
- javascript - 如何限制日期选择器仅接收输入字段中的数字和连字符并限制 Vue 中的其他值?