DF;
OpCode PYear OperationStartDate
0 MCI6AF2 1993 2017-03-24
1 MCI6BF2 1994 2017-03-24
2 APJ5LFC 1975 2017-03-13
3 MQL0AF3 1986 2017-03-16
4 BMR3KFC 1982 2017-03-15
5 BRM1NFC 1981 2017-03-15
6 LNP5GF2 1987 2017-03-16
7 EAS5 1999 2017-03-22
8 HRK1DSC 1971 2017-03-17
9 HRK2FSC 1972 2017-03-17
10 NMI6BF2 1994 2017-03-22
11 NMI6AF2 1994 2017-03-20
12 HHY1JF1 1996 2017-02-01
Я могу группировать, используя один атрибут «код операции», чтобы получить минимальную дату в «OperationStartDate»; передайте эту минимальную дату в объединение и сохраните результат для использования в Excel;
df2 = df.reset_index()
df3 = df2.loc[df2.groupby('OpCode')['LastOperationDate'].idxmin()] #Try df3 = df2.loc[df2.groupby(['OpCode','PYEAR'])['LastOperationDate'].idxmin()]
Переименовать df3 в столбец «LastOperationDate»
df3.rename(columns={'LastOperationDate':'EarliestStartDate'}, inplace=True)
df3.drop(df3.columns[[0,4,1,5,6]], axis=1, inplace=True)
df6 = pd.merge(left = df, right = df3, how ='left', on ='OpCode')
writer = ExcelWriter('C:\Current Projects\Mapping\Python\Process Outputs\Example1321.xlsx')
df6.to_excel(writer,'Sheet1',index=False)
writer.save()
Проблема в том, что если я сгруппирую несколько атрибутов OpCode & PYear, я получаю результат, который я не могу ни передать в объединение, ни сохранить в Excel. В этом случае я использую следующие альтернативные коды:
df3 =df['Operation Start Date'].groupby([df['OpCode'], df['PYear']]).min()
df4= df.groupby(['OpCode', 'PYear'])['Operation Start Date'].apply(lambda x : x.min())
Мой результат;
Op Code P Year
ANN3EF1 1994 2017-08-29
APJ5LFC 1975 2017-03-13
APJ6EFC 1977 2017-10-09
APJ6GFC 1976 2017-09-04
APJ6HFC 1975 2017-09-07
APJ6JFC 1977 2017-07-27
AYN4RFC 1968 2017-11-13
AYN6CF1 1984 2017-03-31
AYN6CF3 1984 2017-08-29
AYN6DF3 1985 2017-09-05
AZZ7AF1 2004 2017-08-04
Кто-нибудь знает, как я могу передать это в следующее соединение;
df6 = pd.merge(left = df, right = df3, how ='left', on ='OpCode')
ИЛИ добавить заголовок столбца к выходным данным
ИЛИ Сохранить в Excel