我有一个名为 df1
的数据帧和一个名为 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 Marcel
我想根据此数据帧列表中的 ID 和日期将值附加到 df1
。
条件是:
- 如果 df1 中 ID 111 的最大日期等于列表中某个 df 中 ID 111 的最大日期,则不执行任何操作。
- 如果 df1 中 ID 222 的最大日期小于列表中某个 df 中 ID 222 的最大日期,则执行一些操作。
输入应该是什么样子:
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 Marcel
df_B 的日期等于 df1,因此我们不更新 df1,但对于其他 2 个 df,我们需要将它们的值附加到 df1
最佳答案
不要使用list
作为变量名,因为它是Python内置数据类型。我还将 df_A
、df_B
和 df_C
连接到一个数据帧中,以便于操作:
# Concatenate df_A, df_B, df_C into a single frame, called df2
df2 = pd.concat([df_A, df_B, df_C], ignore_index=True)
# Line up df1 and df2 by ID so we can compare their dates
compare = df1[['ID', 'date']].merge(df2, on='ID', suffixes=('1', '2'))
# For cases where date1 < date2, append them to df1
new_df = compare.query('date1 < date2').rename(columns={'date2': 'date'})[['ID', 'date', 'Name']]
df1 = df1.append(new_df, ignore_index=True)
关于python - Python Dataframe 中的多个 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57591776/