这是使用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'])
答案 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