Python 3.6-将输出作为新列添加到数据框,然后输出到excel

时间:2018-08-06 13:30:42

标签: python dictionary dataframe

我需要从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种最大的商品及其价值以达到卓越。我已附加了当前数据结构的图像,以及它的外观。 Original Data Structure Desired Output

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

{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}}

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

1 个答案:

答案 0 :(得分:0)

尝试

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')