【问题标题】:Pandas Merge Cells in First Column with Same ValuesPandas 合并第一列中具有相同值的单元格
【发布时间】:2022-01-01 04:21:21
【问题描述】:

我想合并 Excel 文件第一列中的连续值并将其导出到另一个。我的问题与this one 非常相似,但我无法得到 正确的输出文件。

输入 Excel 文件 (Modules.xlsx)

data = pd.read_excel(io="Modules.xlsx")
df = pd.DataFrame(data=data).set_index([data.columns[0]])
print(df)
with pd.ExcelWriter(path="excel_file.xlsx", engine="xlsxwriter") as writer:
    df.to_excel(excel_writer=writer, sheet_name="Inventories")
    old_ws = writer.sheets.get("Inventories")
    for col, val in enumerate(df.reset_index().columns):
        old_ws.write(0, col, val)
                                                   Module Name Serial Number       PID                                 Description
MGMT IP Address (Hostname)
sandbox-iosxe-latest-1.cisco.com (csr1000v-1)          Chassis   9ESGOBARV9D  CSR1000V                      Cisco CSR1000V Chassis
sandbox-iosxe-latest-1.cisco.com (csr1000v-1)        module R0   JAB1303001C  CSR1000V              Cisco CSR1000V Route Processor
sandbox-iosxe-latest-1.cisco.com (csr1000v-1)        module F0           NaN  CSR1000V  Cisco CSR1000V Embedded Services Processor
sandbox-iosxe-recomm-1.cisco.com (csr1000v-recomm)     Chassis   926V75BDNRJ  CSR1000V                      Cisco CSR1000V Chassis
sandbox-iosxe-recomm-1.cisco.com (csr1000v-recomm)   module R0   JAB1303001C  CSR1000V              Cisco CSR1000V Route Processor
sandbox-iosxe-recomm-1.cisco.com (csr1000v-recomm)   module F0           NaN  CSR1000V  Cisco CSR1000V Embedded Services Processor

输出excel_file.xlsxModules.xlsx 完全相同。为了让excel_file.xlsx 看起来像下图,我缺少什么?

Pandas v1.3.4 & xlsxwriter v3.0.2

【问题讨论】:

  • 你必须使用多级索引(例如set_index([d.columns[:2]]),而不是像你那样的常规索引
  • @Stef 为什么它只适用于set_index([data.columns[0], data.columns[0]]) 而不是set_index([data.columns[:2]]) 我得到ValueError: Length mismatch: Expected 6 rows, received array of length 2 .d is incorrect and supposed to be data
  • 对不起,一定是set_index(data.columns[:2].tolist())

标签: python excel pandas xlsxwriter


【解决方案1】:

首先,df = pd.DataFrame(data=data).set_index([d.columns[0]]) 中的“d”是什么?

从您链接的问题的公认答案中,我认为索引必须是多级的(超过 1 个索引)

所以你会有 ...set_index(["MGMT IP Address (Hostname)", "Module Name"])

如果没有你的数据,我无法检查。

也许这个简单的例子也适用于您的数据:

import pandas as pd

data = {"A": ["a", "a", "b" ,"c" ,"d" ], "B": [2, 2, 2, 2, 1], "C":[1, 2, 3, 5, 6]}
df1 = pd.DataFrame(data=data).set_index(["A"])
df1
   B  C
A      
a  2  1
a  2  2
b  2  3
c  2  5
d  1  6

df2 = pd.DataFrame(data=data).set_index(["A","B"])
df2

     C
A B   
a 2  1
  2  2
b 2  3
c 2  5
d 1  6

【讨论】:

  • 固定d,因为它应该是data
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
相关资源
最近更新 更多