Дано 2 кадра данных панд
Med_DF
Key Med
1 A
1 B
1 C
2 A
2 F
3 A
3 C
3 E
4 A
4 B
4 C
4 D
Key_DF
Key ID
1 A1
2 A2
3 A3
4 A4
5 A5
Как объединитьдва без дубликата Keys
, сопоставить ID
с каждым Key
и создать производную переменную в новом столбце?Производная переменная будет возвращать число медалей за ID
или пустое / Nan
, если 0, как показано в Result_DF ниже
Result_DF
Key ID Med
1 A1 3
2 A2 2
3 A3 3
4 A4 4
5 A5
То, что я пробовал
Я уверен, что мое решение архаично и неэффективно, поэтому я прошу более чистое, потенциально более быстрое решение.Тем не менее, я создаю формулы Excel через циклы, чтобы заполнить производный столбец и найти ID
, соответствующий Key
.
# read in Med and Key files into dataframes
Med_DF = pd.read_csv(med_file, usecols = ['Key', 'Med'], encoding = 'utf-8', keep_default_na=False, na_values=[''])
Key_DF = pd.read_csv(key_file, usecols = ['Key', 'ID'], encoding = 'utf-8', keep_default_na=False, na_values=[''])
# add empty ID column to Med_DF
Med_DF.insert(0, "ID", "")
# assign length of dataframes
length_of_med = len(Med_DF)
length_of_key = len(Key_DF)
# create empty lists for formulas
med_countif = []
med_vlookup = []
# med VLOOKUP formulas
for i in range(2,length_of_med+2):
formula = '=VLOOKUP($B{0},Sheet1!$A:$B,2,FALSE)'.format(i)
med_vlookup.append(formula)
# med COUNTIF formulas
for i in range(2,length_of_key+2):
formula =
'=IF(COUNTIF(Sheet1!$A:$A,$B{0})=0,"",COUNTIF(Sheet1!$A:$A,$B{0}))'.format(i)
med_countif.append(formula)
# write formulas to columns
Key_DF.loc[:, "Meds"] = meds_formulas
Med_DF.loc[:, "Key"] = meds_vlookup