我有一个项目,想从更有经验的用户那里知道达到目标的最佳方法。请帮助一个新手)
需要的是:
我在做的是:
所以,我的问题是:
发布于 2020-07-25 15:32:57
下面是一种设置粮食加工管道的方法。首先,使用下载和计算逻辑创建一个函数。
def process_grain(data_file, current_week, grain):
fields = ["Thursday", "Grade", "Class", "Grain", "Destination", "Metric Ton" ]
results = dict()
with open(data_file, 'rt') as handle:
table = (pd.read_csv(handle,
usecols = fields,
parse_dates = ["Thursday"])
.query('Thursday == @current_week and Grain == @grain')
.pivot_table(values = "Metric Ton",
index = "Destination",
columns = "Class",
aggfunc = "sum",
fill_value = 0,
margins = True,
margins_name = "Total"
)
)
results['by_dest_class'] = table
results['by_dest'] = table.sum(axis=0).iloc[:-1].sort_values(ascending=False)
results['by_class'] = table.sum(axis=1).iloc[:-1].sort_values(ascending=False)
results['metric_ton'] = table.at['Total', 'Total']
return results第二,设置参数并调用函数。该函数返回一个数据框架(枢轴表);两个系列(按类别和目的地分列)和一个标量(一周的总公吨)。
data_file = 'CY2020.csv'
current_week = '2020-07-16'
grain = 'WHEAT'
results = process_grain(data_file, current_week, grain)最后,我们可以遍历结果字典,查看关键名称和值数据类型:
for k, v in results.items():
print('{:16s} {}'.format(k, type(v)))
by_dest_class <class 'pandas.core.frame.DataFrame'>
by_dest <class 'pandas.core.series.Series'>
by_class <class 'pandas.core.series.Series'>
metric_ton <class 'numpy.int64'>发布于 2020-07-24 05:53:24
您可以在margins ()命令中使用pivot_table和margins_name来获取行和列的总计。经修订的职能要求如下:
weekly.pivot_table(values = "Metric Ton",
index = "Destination",
columns = "Class",
aggfunc = "sum",
fill_value = 0,
margins = True,
margins_name = "Total"
)你能张贴几行csv文件吗?可以稍微简化从read_csv()到pivot_table()的步骤。
https://stackoverflow.com/questions/63067337
复制相似问题