Хотя не очень понятно, какова ваша цель, я думаю, 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)
. Я рекомендую вам поиск нужных вам функций. Надеюсь, это полезно. Удачи!