熊猫数据框-合并两个数据框以确定历史记录/转换

时间:2019-08-06 21:11:37

标签: python pandas dataframe merge

我正在尝试跟踪一组交货的移动历史。我有两个数据框-第一个是历史记录开始之前每个交付物品的最后一个已知位置:

java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$EndpointWebMvcConfiguration due to org/springframework/web/servlet/config/annotation/AsyncSupportConfigurer not found. Make sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:55) ~[spring-boot-autoconfigure-1.5.14.RELEASE.jar:1.5.14.RELEASE]
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102) ~[spring-context-4.3.18.RELEASE.jar:4.3.18.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$TrackedConditionEvaluator.shouldSkip(ConfigurationClassBeanDefinitionReader.java:444) ~[spring-context-4.3.18.RELEASE.jar:4.3.18.RELEASE]
    etc...
    at com.dish.wfm.controller.SamsungUpdateJobApplication.main(SamsungUpdateJobApplication.java:17) [classes/:na]
Caused by: java.lang.NoClassDefFoundError: org/springframework/web/servlet/config/annotation/AsyncSupportConfigurer
    at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_211]
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_211]
    at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_211]
    etc...
Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_211]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_211]
    ... 36 common frames omitted

org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration] for bean with name 'org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration': problem with class file or dependent class; nested exception is java.lang.VerifyError: class org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration overrides final method configureHandlerExceptionResolvers.(Ljava/util/List;)V
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1394) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:641) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE] 
    etc...
Caused by: java.lang.VerifyError: class org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration overrides final method configureHandlerExceptionResolvers.(Ljava/util/List;)V
    at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_211]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_211]
    etc...

接下来是交货历史记录:

prior_location = pd.DataFrame([
    {'Equip': 'A-1', 'Date': '2019-07-15', 'Location': '123 Main St.'},
    {'Equip': 'A-2', 'Date': '2019-07-17', 'Location': '15 First Ave.'}
])

我的目标是为每次交付生成一个带有deliveries = pd.DataFrame([ {'Equip': 'A-1', 'Date': '2019-08-01', 'DeliveredTo': '191 Long Rd.'}, {'Equip': 'A-1', 'Date': '2019-08-03', 'DeliveredTo': '582 Pleasant Court'}, {'Equip': 'A-1', 'Date': '2019-08-04', 'DeliveredTo': 'SHOP'}, {'Equip': 'A-2', 'Date': '2019-07-30', 'DeliveredTo': 'YARD'}, {'Equip': 'A-2', 'Date': '2019-08-01', 'DeliveredTo': '191 Long Rd.'}, {'Equip': 'A-2', 'Date': '2019-08-05', 'DeliveredTo': '15 Lake Drive'} ]) PickedUpFrom列的数据框。例如-最终数据框应类似于:

DeliveredTo

请注意,每台设备的第一个条目history = pd.DataFrame([ {'Equip': 'A-1', 'Date': '2019-08-01', 'PickedUpFrom': '123 Main St.', 'DeliveredTo': '191 Long Rd.'}, {'Equip': 'A-1', 'Date': '2019-08-03', 'PickedUpFrom': '191 Long Rd.', 'DeliveredTo': '582 Pleasant Court'}, {'Equip': 'A-1', 'Date': '2019-08-04', 'PickedUpFrom': '582 Pleasant Court', 'DeliveredTo': 'SHOP'}, {'Equip': 'A-2', 'Date': '2019-07-30', 'PickedUpFrom': '123 Main St.', 'DeliveredTo': 'YARD'}, {'Equip': 'A-2', 'Date': '2019-08-03', 'PickedUpFrom': 'YARD', 'DeliveredTo': '191 Long Rd.'}, {'Equip': 'A-2', 'Date': '2019-08-04', 'PickedUpFrom': '15 First Ave.', 'DeliveredTo': '15 Lake Drive'}, ]) 来自PickedUpFrom表,随后的是上一行(对于该设备)prior_location。 / p>

任何想办法做到这一点的方法(我的实际数据集有数千台设备)。

有两件事要注意-每个日期每台设备只有一次交货(因此DeliveredTo在给定日期仅在一个位置)。另外,保证A-1数据帧的位置在交货数据帧的第一个元素之前。

1 个答案:

答案 0 :(得分:1)

这里是首先groupby + shift,然后是fillnaprior_location的一种方式

deliveries['PickedUpFrom']=deliveries.groupby('Equip').DeliveredTo.shift()
s=prior_location.set_index('Equip')['Location'].reindex(deliveries.Equip).values
deliveries['PickedUpFrom'].fillna(pd.Series(s,index=deliveries.index),inplace=True)
deliveries
Out[51]: 
  Equip        Date         DeliveredTo        PickedUpFrom
0   A-1  2019-08-01        191 Long Rd.        123 Main St.
1   A-1  2019-08-03  582 Pleasant Court        191 Long Rd.
2   A-1  2019-08-04                SHOP  582 Pleasant Court
3   A-2  2019-07-30                YARD       15 First Ave.
4   A-2  2019-08-01        191 Long Rd.                YARD
5   A-2  2019-08-05       15 Lake Drive        191 Long Rd.