【问题标题】:Concatenate dataframe elements with common column names of list将数据框元素与列表的公共列名连接起来
【发布时间】:2020-09-07 18:50:59
【问题描述】:

我有一个包含不同数据框的列表。我需要将相同的数据框合并 列名称合二为一,并将其​​写入 CSV 输出或单个数据帧。

我设法获得了列名,但想不出好的逻辑来执行上述操作 操作。

我的情况:

有 9 个数据框元素的 MERGED_LIST。列名如下

array(['A','B','C']) - 10 rows
array(['A','B','C']) - 15 rows
array(['W','X','Y','Z']) - 10 rows
array(['W','X','Y','Z']) - 20 rows
array(['W','X','Y','Z']) - 45 rows
array(['W','X','Y','Z']) - 30 rows
array(['W','X','Y','Z']) - 5 rows
array(['H']) - 50 rows

需要最终输出:

CSV1 或 DF1:

A B C 

25 行

CSV2 或 DF2:

W X Y Z

110 行

CSV3 或 DF3:

H 

50 行

【问题讨论】:

  • 您尝试使用pd.concat 吗?
  • @AntonProtopopov...我已经考虑过用于单个数据帧的 pd.concat 并且更早得到它。在这里,我正在寻找列匹配(因为它们是数组)逻辑方面的帮助。我有一个想法在高级别,但由于我是 python 新手,无法正确构建它。我的逻辑如下: 1. 分别添加第一个数据框。 2.读取第二个数据帧的列并与第一个比较 3.如果列匹配,则附加到较早的数据帧。 4 再次循环 5.如果列不匹配创建单独的数据框并循环直到实现。请帮助
  • @SergeyAntopolskiy 我正在努力并会发布
  • @marupav 所以让我直说吧。您需要一种自动化的方式来查看哪些原始数据框与列匹配,并为每个集群输出单独的组合数据框?另一个问题:是否存在部分匹配(例如,在列上匹配,其他不匹配)?在这种情况下你想做什么?

标签: python pandas


【解决方案1】:

不确定这是否是您要查找的内容。这是我的回应。让我知道这是否有帮助。如果没有,请提供更多详细信息,以便我们为您提供帮助。

我知道这是一篇旧帖子,但想看看这是否是您要查找的内容。

我还建议您查看我在 Pandas Merging 101Pandas .concat 回复中找到的最佳帖子。

import pandas as pd

df1 = pd.DataFrame({'A':['A1']*10,
                   'B':['B1']*10,
                   'C':['C1']*10})

df2 = pd.DataFrame({'A':['A2']*15,
                   'B':['B2']*15,
                   'C':['C2']*15})

df3 = pd.DataFrame({'W':['W3']*10,
                   'X':['X3']*10,
                   'Y':['Y3']*10,
                   'Z':['Z3']*10})

df4 = pd.DataFrame({'W':['W4']*20,
                   'X':['X4']*20,
                   'Y':['Y4']*20,
                   'Z':['Z4']*20})

df5 = pd.DataFrame({'W':['W5']*45,
                   'X':['X5']*45,
                   'Y':['Y5']*45,
                   'Z':['Z5']*45})

df6 = pd.DataFrame({'W':['W6']*30,
                   'X':['X6']*30,
                   'Y':['Y6']*30,
                   'Z':['Z6']*30})

df7 = pd.DataFrame({'W':['W7']*5,
                   'X':['X7']*5,
                   'Y':['Y7']*5,
                   'Z':['Z7']*5})

dfH = pd.DataFrame({'H':['H8']*50})

dfABC  = df1.merge(df2, on=['A','B','C'],how='outer')
dfWXYZ = pd.concat([df3,df4,df5,df6,df7], axis=0,sort=False)

print(dfABC)
print(dfWXYZ)
print(dfH)

输出如下:

dfABC results in 25 rows (10 + 15)

dfWXYZ results in 110 rows (10 + 20 + 45 + 30 + 5)

dfH results in 50 rows

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2019-04-17
    • 2021-10-22
    • 2022-12-12
    • 2016-06-25
    • 1970-01-01
    • 2020-10-09
    • 2015-08-18
    • 2018-11-13
    相关资源
    最近更新 更多