Pandas 合并第一列中具有相同值的单元格
Pandas Merge Cells in First Column with Same Values
我想合并 Excel 文件第一列中的连续值并将其导出到另一个文件。我的问题与 非常相似,但我无法得到
正确的输出文件。
输入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.xlsx
与Modules.xlsx
完全一样。我缺少什么才能使 excel_file.xlsx
看起来像下图?
Pandas v1.3.4 & xlsxwriter v3.0.2
首先,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
我想合并 Excel 文件第一列中的连续值并将其导出到另一个文件。我的问题与
输入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.xlsx
与Modules.xlsx
完全一样。我缺少什么才能使 excel_file.xlsx
看起来像下图?
Pandas v1.3.4 & xlsxwriter v3.0.2
首先,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