Надеюсь, это поможет вам. С вашей стратегией *args
кажется, что вы хотите запросить уникальные значения в (потенциально) нескольких столбцах. Вы можете использовать pd.unique
, чтобы получить уникальные значения из любого одного столбца, и внешние, чтобы расширить его до нескольких столбцов. Я не знаю, как вы хотите точно обрабатывать несколько столбцов, поэтому я только догадался об одном.
Вы можете построить большую часть запроса перед запуском l oop для уникальных значений cty_rpt. Составьте список и создайте строку для каждого запроса.
Я не смог заставить это работать при добавлении дат начала / окончания, поэтому я оставил это закомментированным.
import pandas as pd
def func1(df, *args, startDate, endDate, date_col='date', inplace=False, **kwargs):
output = []
query_terms = ['{}=="{}"'.format(*item) for item in kwargs.items()]
# Todo: This didn't work for me, date query needs to be debugged
# query_terms += [
# '{}>"{}"'.format(date_col, startDate),
# '{}<"{}"'.format(date_col, endDate)]
for series in args:
for name in pd.unique(series):
print('querying', series.name, name)
s = "&".join(query_terms + ['{}=="{}"'.format(series.name, name)])
res = df.query(s, inplace=inplace) # todo: i think inplace should always be false
output.append(res)
return output
df = pd.read_csv("mydf.csv", encoding="utf-8")
print(df)
result = func1(df, df.cty_rpt,startDate='2013-12-31', endDate='2019-01-01', meat_type='Beef', temperature='Chilled',flow='E')
for res in result:
print('------------------------------')
print(res)
Вывод
Unnamed: 0 flow cty_rpt origin destination value qty1 date animal_type meat_type temperature
0 0 E AR Argentina Albania 115691.00 18.26200 1/1/2017 Bovine Beef Frozen
1 1 I AR Argentina Albania 72425.20 19.17100 1/1/2016 Bovine Beef Frozen
2 2 I US Argentina Angola 109523.15 50.94100 5/1/2014 Bovine Beef Frozen
3 3 E US Argentina United Arab Emirates 1078.00 0.15300 10/1/2014 Bovine Beef Chilled
4 4 E US Argentina Albania 3373.00 0.26200 12/1/2014 Bovine Pork Frozen
5 5 E US Argentina Angola 36308.77 9.55494 4/1/2015 Bovine Pork Frozen
6 6 E AR Argentina Angola 10654.65 0.87569 6/1/2017 Bovine Pork Chilled
7 7 E AR Argentina United Arab Emirates 86.50 0.02000 7/1/2016 Bovine Pork Chilled
8 8 I AR Argentina Angola 68797.00 12.12000 1/1/2014 Bovine Beef Chilled
9 9 I AUC Argentina Angola 42000.00 21.00000 2/1/2017 Bovine Beef Frozen
10 10 I AUC Argentina Albania 180078.00 26.79100 12/1/2017 Bovine Beef Frozen
11 11 I AUC Argentina Angola 194402.47 45.29000 1/1/2015 Bovine Pork Frozen
12 12 I AUC Argentina United Arab Emirates 97928.05 6.47850 1/1/2014 Bovine Pork Chilled
13 13 E US Argentina Angola 61430.00 10.85000 4/1/2014 Bovine Beef Chilled
14 14 E US Argentina Angola 4153.80 1.97800 12/1/2014 Bovine Beef Frozen
15 15 E US Argentina Albania 55599.30 10.29300 6/1/2014 Bovine Beef Frozen
16 16 I US Argentina Angola 11531.00 0.20100 10/1/2014 Bovine Beef Frozen
17 17 I AR Argentina United Arab Emirates 1908.50 0.17800 4/1/2017 Bovine Pork Frozen
18 18 I AR Argentina Angola 59476.10 10.85600 1/1/2018 Bovine Pork Frozen
19 19 E CN Argentina Angola 452174.70 74.82600 12/1/2014 Bovine Pork Frozen
20 20 E CN Argentina Albania 101596.00 13.57200 11/1/2014 Bovine Pork Frozen
21 21 E KR Argentina Angola 135035.00 27.00700 5/1/2014 Bovine Beef Frozen
22 22 E KR Argentina Angola 86506.00 46.76000 10/1/2015 Bovine Beef Frozen
23 23 I KR Argentina Argentina 300876.85 24.53188 3/1/2014 Bovine Beef Chilled
24 24 E KR Argentina Albania 475380.06 72.74437 9/1/2015 Bovine Pork Frozen
25 25 E AR Argentina Albania 80396.00 8.77800 1/1/2018 Bovine Pork Frozen
26 26 I AR Argentina United Arab Emirates 160.00 0.02000 11/1/2014 Bovine Pork Chilled
27 27 I US Argentina Albania 212000.00 26.50000 10/1/2015 Bovine Beef Frozen
28 28 E US Argentina Albania 164459.08 20.70592 12/1/2015 Bovine Beef Frozen
29 29 E AUC Argentina Albania 235810.00 49.22200 3/1/2015 Bovine Beef Frozen
querying cty_rpt AR
querying cty_rpt US
querying cty_rpt AUC
querying cty_rpt CN
querying cty_rpt KR
------------------------------
Empty DataFrame
Columns: [Unnamed: 0, flow, cty_rpt, origin, destination, value, qty1, date, animal_type, meat_type, temperature]
Index: []
------------------------------
Unnamed: 0 flow cty_rpt origin destination value qty1 date animal_type meat_type temperature
3 3 E US Argentina United Arab Emirates 1078.0 0.153 10/1/2014 Bovine Beef Chilled
13 13 E US Argentina Angola 61430.0 10.850 4/1/2014 Bovine Beef Chilled
------------------------------
Empty DataFrame
Columns: [Unnamed: 0, flow, cty_rpt, origin, destination, value, qty1, date, animal_type, meat_type, temperature]
Index: []
------------------------------
Empty DataFrame
Columns: [Unnamed: 0, flow, cty_rpt, origin, destination, value, qty1, date, animal_type, meat_type, temperature]
Index: []
------------------------------
Empty DataFrame
Columns: [Unnamed: 0, flow, cty_rpt, origin, destination, value, qty1, date, animal_type, meat_type, temperature]
Index: []