我有一个名为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。
我检查了:
它们看起来像
df_A = RangeIndex(start=0, stop=1, step=1)
df_1 = RangeIndex(start=0, stop=22, step=1)
并再次运行代码,但它始终返回ValueError:(