首页 > 解决方案 > Python 3.6 - 将输出作为新列添加到数据框,然后输出到 excel

问题描述

我需要从 excel 文件中按县获得 3 种最大的商品,然后我想将这些结果输出到 excel 中的新列。我在这个论坛的帮助下完成了排序,但似乎无法弄清楚如何将其导出到 excel - 我试图创建一个新的数据框列,然后我将编写数据框擅长,但如果有更直接的方法,我会很感激。

df = pd.read_excel('abc.xlsx')
d = df.set_index('county').to_dict('index')

for k, v in d.items():
    i = sorted(v.items(), key = lambda x: x[1], reverse=True)
    print([k, ', '.join([f'{com}: {value}' for, value in i[0:3]])]) 

我最终想弄清楚如何更改该打印行以使其输出 3 种最大的商品及其值以达到卓越。我附上了当前数据结构的图像,以及我希望它的样子。原始数据结构期望的输出

这是包含前几行数据的字典 - 希望这会有所帮助:

{1001: {'CATTLE_USDA_VALUE': 5988000.0, 'CORN_USDA_VALUE': 460000.0, 'COTTON_USDA_VALUE': 5465000.0, 'DAIRY_USDA_VALUE': 0.0, 'HOGS_USDA_VALUE': 3000.0, 'POULTRY_USDA_VALUE': 0.0, 'SOYBEANS_USDA_VALUE': 664000.0, 'WHEAT_USDA_VALUE': 679000.0, 'TOTAL_USDA_VALUE': 19811000.0, 'CATTLE_USDA_Share': 0.30225632224521731, 'CORN_USDA_SHARE': 0.023219423552571804, 'COTTON_USDA_SHARE': 0.2758568472060976, 'DAIRY_USDA_SHARE': 0.0, 'HOGS_USDA_SHARE': 0.00015143102316894655, 'POULTRY_USDA_SHARE': 0.0, 'SOYBEANS_USDA_SHARE': 0.033516733128060167, 'WHEAT_USDA_SHARE': 0.034273888243904899, 'CATTLE_FDIC_SHARE': 0.0, 'CATTLE_REPORTING_SHARE': 0.0, 'CORN_FDIC_SHARE': 0.0, 'CORN_REPORTING_SHARE': 0.0, 'COTTON_FDIC_SHARE': 0.0, 'COTTON_REPORTING_SHARE': 0.0, 'DAIRY_FDIC_SHARE': 0.0, 'DAIRY_REPORTING_SHARE': 0.0, 'HOGS_FDIC_SHARE': 0.0, 'HOGS_REPORTING_SHARE': 0.0, 'POULTRY_FDIC_SHARE': 36.031179424999898, 'POULTRY_REPORTING_SHARE': 74.074074074099897, 'SOYBEANS_FDIC_SHARE': 0.0, 'SOYBEANS_REPORTING_SHARE': 0.0, 'WHEAT_FDIC_SHARE': 0.0, 'WHEAT_REPORTING_SHARE': 0.0}, 1003: {'CATTLE_USDA_VALUE': 0.0, 'CORN_USDA_VALUE': 3818000.0, 'COTTON_USDA_VALUE': 7344000.0, 'DAIRY_USDA_VALUE': 220000.0, 'HOGS_USDA_VALUE': 4000.0, 'POULTRY_USDA_VALUE': 0.0, 'SOYBEANS_USDA_VALUE': 8977000.0, 'WHEAT_USDA_VALUE': 3680000.0, 'TOTAL_USDA_VALUE': 135562000.0, 'CATTLE_USDA_Share': 0.0, 'CORN_USDA_SHARE': 0.028164234815066171, 'COTTON_USDA_SHARE': 0.05417447367256311, 'DAIRY_USDA_SHARE': 0.001622873666661749, 'HOGS_USDA_SHARE': 2.9506793939304526e-05, 'POULTRY_USDA_SHARE': 0.0, 'SOYBEANS_USDA_SHARE': 0.066220622298284182, 'WHEAT_USDA_SHARE': 0.027146250424160162, 'CATTLE_FDIC_SHARE': 12.3912520289, 'CATTLE_REPORTING_SHARE': 82.142857142899899, 'CORN_FDIC_SHARE': 0.0, 'CORN_REPORTING_SHARE': 0.0, 'COTTON_FDIC_SHARE': 0.0, 'COTTON_REPORTING_SHARE': 0.0, 'DAIRY_FDIC_SHARE': 0.0, 'DAIRY_REPORTING_SHARE': 0.0, 'HOGS_FDIC_SHARE': 0.0, 'HOGS_REPORTING_SHARE': 0.0, 'POULTRY_FDIC_SHARE': 32.076141693899899, 'POULTRY_REPORTING_SHARE': 75.0, 'SOYBEANS_FDIC_SHARE': 0.0, 'SOYBEANS_REPORTING_SHARE': 0.0, 'WHEAT_FDIC_SHARE': 0.0, 'WHEAT_REPORTING_SHARE': 0.0}, 1005: {'CATTLE_USDA_VALUE': 5581000.0, 'CORN_USDA_VALUE': 1324000.0, 'COTTON_USDA_VALUE': 4904000.0, 'DAIRY_USDA_VALUE': 0.0, 'HOGS_USDA_VALUE': 0.0, 'POULTRY_USDA_VALUE': 83809000.0, 'SOYBEANS_USDA_VALUE': 0.0, 'WHEAT_USDA_VALUE': 0.0, 'TOTAL_USDA_VALUE': 104356000.0, 'CATTLE_USDA_Share': 0.05348039403580053, 'CORN_USDA_SHARE': 0.012687339491739814, 'COTTON_USDA_SHARE': 0.046992985549465294, 'DAIRY_USDA_SHARE': 0.0, 'HOGS_USDA_SHARE': 0.0, 'POULTRY_USDA_SHARE': 0.80310667331059071, 'SOYBEANS_USDA_SHARE': 0.0, 'WHEAT_USDA_SHARE': 0.0, 'CATTLE_FDIC_SHARE': 0.0, 'CATTLE_REPORTING_SHARE': 0.0, 'CORN_FDIC_SHARE': 0.0, 'CORN_REPORTING_SHARE': 0.0, 'COTTON_FDIC_SHARE': 0.0, 'COTTON_REPORTING_SHARE': 0.0, 'DAIRY_FDIC_SHARE': 0.0, 'DAIRY_REPORTING_SHARE': 0.0, 'HOGS_FDIC_SHARE': 0.0, 'HOGS_REPORTING_SHARE': 0.0, 'POULTRY_FDIC_SHARE': 0.0, 'POULTRY_REPORTING_SHARE': 0.0, 'SOYBEANS_FDIC_SHARE': 1.5549794663100001, 'SOYBEANS_REPORTING_SHARE': 64.2201834862, 'WHEAT_FDIC_SHARE': 1.0388869362099999, 'WHEAT_REPORTING_SHARE': 60.550458715600001}, 1007: {'CATTLE_USDA_VALUE': 1924000.0, 'CORN_USDA_VALUE': 0.0, 'COTTON_USDA_VALUE': 0.0, 'DAIRY_USDA_VALUE': 0.0, 'HOGS_USDA_VALUE': 0.0, 'POULTRY_USDA_VALUE': 0.0, 'SOYBEANS_USDA_VALUE': 0.0, 'WHEAT_USDA_VALUE': 0.0, 'TOTAL_USDA_VALUE': 0.0, 'CATTLE_USDA_Share': 0.0, 'CORN_USDA_SHARE': 0.0, 'COTTON_USDA_SHARE': 0.0, 'DAIRY_USDA_SHARE': 0.0, 'HOGS_USDA_SHARE': 0.0, 'POULTRY_USDA_SHARE': 0.0, 'SOYBEANS_USDA_SHARE': 0.0, 'WHEAT_USDA_SHARE': 0.0, 'CATTLE_FDIC_SHARE': 0.0, 'CATTLE_REPORTING_SHARE': 0.0, 'CORN_FDIC_SHARE': 3.70720825635, 'CORN_REPORTING_SHARE': 71.604938271600005, 'COTTON_FDIC_SHARE': 0.0, 'COTTON_REPORTING_SHARE': 0.0, 'DAIRY_FDIC_SHARE': 0.0, 'DAIRY_REPORTING_SHARE': 0.0, 'HOGS_FDIC_SHARE': 0.0, 'HOGS_REPORTING_SHARE': 0.0, 'POULTRY_FDIC_SHARE': 43.716573955800001, 'POULTRY_REPORTING_SHARE': 77.777777777799898, 'SOYBEANS_FDIC_SHARE': 4.7009247847799998, 'SOYBEANS_REPORTING_SHARE': 61.728395061699899, 'WHEAT_FDIC_SHARE': 0.0, 'WHEAT_REPORTING_SHARE': 0.0}, 1009: {'CATTLE_USDA_VALUE': 11721000.0, 'CORN_USDA_VALUE': 831000.0, 'COTTON_USDA_VALUE': 1203000.0, 'DAIRY_USDA_VALUE': 0.0, 'HOGS_USDA_VALUE': 28000.0, 'POULTRY_USDA_VALUE': 153682000.0, 'SOYBEANS_USDA_VALUE': 1490000.0, 'WHEAT_USDA_VALUE': 0.0, 'TOTAL_USDA_VALUE': 178191000.0, 'CATTLE_USDA_Share': 0.065777732882132095, 'CORN_USDA_SHARE': 0.0046635351953802379, 'COTTON_USDA_SHARE': 0.0067511827196659767, 'DAIRY_USDA_SHARE': 0.0, 'HOGS_USDA_SHARE': 0.00015713475989247492, 'POULTRY_USDA_SHARE': 0.86245657749269045, 'SOYBEANS_USDA_SHARE': 0.0083618140085638445, 'WHEAT_USDA_SHARE': 0.0, 'CATTLE_FDIC_SHARE': 0.0, 'CATTLE_REPORTING_SHARE': 0.0, 'CORN_FDIC_SHARE': 0.0, 'CORN_REPORTING_SHARE': 0.0, 'COTTON_FDIC_SHARE': 0.0, 'COTTON_REPORTING_SHARE': 0.0, 'DAIRY_FDIC_SHARE': 0.0, 'DAIRY_REPORTING_SHARE': 0.0, 'HOGS_FDIC_SHARE': 0.0, 'HOGS_REPORTING_SHARE': 0.0, 'POULTRY_FDIC_SHARE': 0.0, 'POULTRY_REPORTING_SHARE': 0.0, 'SOYBEANS_FDIC_SHARE': 0.0, 'SOYBEANS_REPORTING_SHARE': 0.0, 'WHEAT_FDIC_SHARE': 0.0, 'WHEAT_REPORTING_SHARE': 0.0}}

然后我想要一个按三个最大数据点排序的附加列,以便第一行与底部图像匹配。

标签: pythondictionarydataframe

解决方案


试试看

import pandas as pd

# you do here pd.read_excel('abc.xlsx')
cols = list('ABCD')
df = pd.DataFrame(pd.np.random.randint(0,1000,size=(10, 4)), columns=cols)
# set all but the largest 3 to 0
for c in cols:
    df.at[df[c].nsmallest(df.shape[0] - 3).index, c] = 0
df.to_excel(output.xlsx')

推荐阅读