Python 是否要将多个数据帧转换为特定格式?

Python 是否要将多个数据帧转换为特定格式?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有两个数据帧: df1 = pd.DataFrame( { "database": { "0": "database1", "1": "database1", "2": "database1", }, "table": { "0": "table A", "1": "table B", "2": "table C", }, "nod

我有两个数据帧:

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不允许我提交问题:看起来你的帖子大部分是代码;请添加更多详细信息。。 我添加此文本只是为了进一步传递。

用于将数据帧连接在一起,然后首先与聚合函数一起使用,以便通过三元组表、数据库、节点返回第一个值:

如果可能,通过三元组表、数据库、节点进行复制,然后使用“通过联接聚合”,以避免数据丢失:

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",
      }
    })
如果将第一个值与重复的三元组一起使用,则只返回第一个值:

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
用于将DataFrame连接在一起,然后首先与聚合函数一起使用,以便通过三元组表、数据库、节点返回第一个值:

如果可能,通过三元组表、数据库、节点进行复制,然后使用“通过联接聚合”,以避免数据丢失:

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",
      }
    })
如果将第一个值与重复的三元组一起使用,则只返回第一个值:

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

您可以连接数据帧和数据透视:

(pd.concat((df1,df2))
   .pivot_table(columns='node', 
                   index=['database','table'], 
                   values='value',
                   aggfunc='first')
   .unstack('database')
   .swaplevel(0,1, axis=1)
)
输出:

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

您可以连接数据帧和数据透视:

(pd.concat((df1,df2))
   .pivot_table(columns='node', 
                   index=['database','table'], 
                   values='value',
                   aggfunc='first')
   .unstack('database')
   .swaplevel(0,1, axis=1)
)
输出:

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

谢谢你们两位。我真的很喜欢aggfunc=','。加入。谢谢你们两位。我真的很喜欢aggfunc=','。加入。