熊猫“只能比较标记相同的DataFrame对象”错误

时间:2019-08-22 09:35:45

标签: python pandas dataframe valueerror

我有一个名为df1的数据帧和一个名为my_list的数据帧列表。

每个字段中都有日期列(例如2019-01-01)和另一个列ID(不是唯一的)以及其他一些内容。

示例:


df1

ID   date         Name
111  2019-01-01   John
222  2019-01-01   Smith
333  2019-01-01   Sam

list = [df_A, df_B, df_C]

# Example from a list:

df_A 

ID   date        Name
111  2019-01-02  Katrin
222  2019-01-02  Ivan
333  2019-01-02  Leo

df_B

ID   date         Name
111  2019-01-01   John
222  2019-01-01   Smith
333  2019-01-01   Sam

df_C

ID   date        Name
111  2019-01-09  Sam_1
222  2019-01-09  Leo_1
333  2019-01-09  Marius

我想根据此数据帧列表中的ID和Date将值附加到df1。

条件是:

如果df1中ID 111的最大日期等于列表中一个df中ID 111的最大日期,则什么也不做。 如果df1中ID 222的最大日期小于列表中df之一中ID 222的最大日期,请执行一些操作。 putput应该是什么样子:

df1

ID   date         Name
111  2019-01-01   John
222  2019-01-01   Smith
333  2019-01-01   Sam
111  2019-01-02  Katrin
222  2019-01-02  Ivan
333  2019-01-02  Leo
111  2019-01-09  Sam_1
222  2019-01-09  Leo_1
333  2019-01-09  Marius

从其他问题来看,我提出了一种基于ID和日期进行比较的解决方案,这正是我所需要的


my_list = [df_A, df_B, df_C]


for cdf in my_list:
    group_df1 =  df1.groupby(['ID']).max()['date']
    group_cdf = cdf.groupby(['ID']).max()['date'] 
    res = group_cdf > group_df1
    group_cdf = group_cdf.loc[res[res==True].index]    
    df1 = df1.append(cdf.loc[cdf['ID'].isin(group_cdf.index) & cdf['date'].isin(group_cdf)])
print(df1) 

我尝试用我的数据运行代码,但是会引发错误:

  

ValueError:只能比较标记相同的Series对象

试图比较group_df1和group_cdf。

我检查了:

  1. ID和日期的日期类型相同。
  2. 索引不同,我为df1和df_A运行.reset_index(inplace = True)。

它们看起来像

df_A = RangeIndex(start=0, stop=1, step=1)
df_1 = RangeIndex(start=0, stop=22, step=1)

并再次运行代码,但它始终返回ValueError:(

0 个答案:

没有答案