使用python分组和导出Excel行

时间:2019-10-27 22:20:26

标签: python excel pandas

这是使用Python。

我有一张Excel工作表,它的最基本形式如下:

New York    Cup a   3
Stockholm   Plate b 5
Madrid  Cup a   2
New York    Cup b   5
New York    Plate a 8
Madrid  Cup b   9
Stockholm   Plate a 2
Stockholm   Cup a   5
Stockholm   Cup b   3
Madrid  Cup a   5
New York    Plate a 8

我想将地点分组在一起,以便所有纽约人和马德里人在一起,然后将它们导出到单独的Excel表中,称为纽约,马德里,斯德哥尔摩。在行上具有相同的信息。因此,基本上只是将行复制并粘贴到以该行命名的新excel工作表中。然后,我想在每个杯子的第二页上将所有杯子一起添加为一个,并将所有盘子添加为一个。在导出数据之前正确执行此操作是否有意义?

最终结果命名为3个excel工作表,仅包含其数据,第二个工作表上包含一些简单的数学运算。

真正的Excel工作表正在处理15000行,50个位置和100个项目。因此,这些更改必须是一种程序方法。下次纽约可能是多伦多。

到目前为止,我已经能够按熊猫对它们进行分组,但是此后的每次尝试都失败了。

大熊猫是新手,所以我认为这是相对容易做到的。

import pandas as pd

stock_report_excel = "small_stores_blocked_stock_value.xlsx"

df_soh = pd.read_excel(stock_report_excel, sheet_name='SOH')
df_stores = df_soh.groupby(['Site Name'])

猜测循环添加到工作表

将项目添加到工作表2

导出

2 个答案:

答案 0 :(得分:0)

虽然不太清楚您的目标是什么,但我想Pandas MultiIndex DataFrame可能对您有所帮助。我在下面写了一些简单的代码,希望可以进一步指导您。

import pandas as pd
sites=pd.Series(['New York','Stockholm','Madrid','New York','New York','Madrid','Stockholm','Stockholm','Stockholm','Madrid','New York'])
col2=pd.Series(['Cup','Plate','Cup','Cup','Plate','Cup','Plate','Cup','Cup','Cup','Plate'])
col3=pd.Series(['a','b','a','b','a','b','a','a','b','a','a'])
col4=pd.Series([3,5,2,5,8,9,2,5,3,5,8])
data=pd.DataFrame({'sites':sites,'col2':col2,'col3':col3,'col4':col4})
# You can of course replce all the codes above with Pandas read related functions.
data1 = data.set_index(['sites','col2','col3']) # Set as MultiIndex DataFrame.
data1.loc[('New York'),:] # This will give you all the 'New York' data
data1.loc[('New York','Cup'),:] # This will give you all the 'New York' & 'Cup' data.
# Retrieving all the 'Cup' data is a bit tricky, see the following
idx=pd.IndexSlice
data1.loc[idx[:,'Cup'],:]

输出如下。

# data
        sites   col2 col3  col4
0    New York    Cup    a     3
1   Stockholm  Plate    b     5
2      Madrid    Cup    a     2
3    New York    Cup    b     5
4    New York  Plate    a     8
5      Madrid    Cup    b     9
6   Stockholm  Plate    a     2
7   Stockholm    Cup    a     5
8   Stockholm    Cup    b     3
9      Madrid    Cup    a     5
10   New York  Plate    a     8
# data1
                      col4
sites     col2  col3
New York  Cup   a        3
Stockholm Plate b        5
Madrid    Cup   a        2
New York  Cup   b        5
          Plate a        8
Madrid    Cup   b        9
Stockholm Plate a        2
          Cup   a        5
                b        3
Madrid    Cup   a        5
New York  Plate a        8
# data1.loc[('New York'),:]
            col4
col2  col3
Cup   a        3
      b        5
Plate a        8
      a        8
# data1.loc[('New York','Cup'),:]
      col4
col3
a        3
b        5
# data1.loc[idx[:,'Cup'],:]
                     col4
sites     col2 col3
New York  Cup  a        3
Madrid    Cup  a        2
New York  Cup  b        5
Madrid    Cup  b        9
Stockholm Cup  a        5
               b        3
Madrid    Cup  a        5

如果您不想看到任何警告并希望保持高性能,则可以全部使用idx和显式编码,分别是:

data1.loc[idx['New York',:,:],:]
data1.loc[idx['New York','Cup',:],:]
data1.loc[idx['','Cup',:],:]

您的下一步是将这些数据选择写入单独的工作表中。我对此不太熟悉,因为我总是将数据写入文本文件。例如,将其中一个写入csv文件就像data1.loc[idx['New York','Cup',:],:].to_csv('result.csv',index=False)一样简单。我建议您搜索所需的功能。 希望这会有所帮助。祝你好运!

答案 1 :(得分:0)

解决问题

import pandas as pd

import os

file = "yourfile.xlsx"

extension = os.path.splitext(file)[1]

filename = os.path.splitext(file)[0]

abpath = os.path.dirname(os.path.abspath(file))

df=pd.read_excel(file, sheet_name="sheetname")

colpick = "column to extract" 

cols=list(set(df[colpick].values))


def sendtofile(cols):

    for i in cols:
        df[df[colpick] == i].to_excel("{}/exported/{}.xlsx".format(abpath, i), sheet_name=i, index=False)
return