更新
如果使用to_frame(),列名似乎不在同一行
重量
型号
HG-R2075 2040
HG220 680
这是我的代码,它将“型号”(这意味着类型)分组,并获取“重量”(重量)的总和并排除该列("是否发送"),其中包含一个值。
import pandas as pd
import numpy as np
import sys
import os
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir ) # change to the path that you already know
try:
ClientName = sys.argv[1]
except :
print(u'没有输入或者错误的客户名称!')
df = pd.read_excel("Summary.xlsm")
df = df[df['客户'].str.contains(ClientName)][pd.isnull(df[u"是否已经发送"])].groupby([ u'型号'])[u'重量'].sum()
print('[CQ:face,id=21] ' + '*' * 10 + u'以下是' + ClientName + u'未发送的重量' + '*' * 10 + '[CQ:face,id=21]')
print(str(df))
输出是这样的:
[CQ:face,id=21] **********以下是KATUN未发送的重量**********[CQ:face,id=
21]
型号 (****the column name is missing here*****)
HG-R2075 2040
HG220 680
Name: 重量, dtype: int64
不知道为什么缺少列名?
我想要的输出是这样的:如何制作?
型号 重量
HG-R2075 2040
HG220 680
Name: 重量, dtype: int64
最佳答案
groupby
操作的结果 df
实际上是一个 Series,而不是 DataFrame。这就是为什么它以不同的格式打印。
print(df.to_frame())
应该能解决问题。
编辑:实际上在这样的数据框中索引名称和列名称不会打印在同一行上。要获得更清晰的输出,请使用 reset_index
获取 2 个正确的列:
print(df.reset_index().to_string(index=False))
关于pandas - 为什么按结果分组的 pandas 输出中缺少列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44871098/