我有两个 dataframes,df1 和 df2。它们具有相同的列名,并且通常具有相同的列 values。我需要隔离列中 value 更改的行,并添加一列来表示之前的 value 是什么。
在下面的示例中,Nancy 的操作数在 df1 和 df2 之间变化。我想用该行创建一个新的 dataframe,即使 Mary 的新行已添加到 df2。
df1:
Name | Action | Number of Actions |
---|---|---|
Stacy | Action1 | 32 |
Nancy | Action2 | 67 |
Emily | Action3 | 89 |
Abby | Action2 | 9 |
df2:
Name | Action | Number of Actions |
---|---|---|
Stacy | Action1 | 32 |
Nancy | Action2 | 75 |
Emily | Action3 | 89 |
Abby | Action2 | 9 |
Mary | Action1 | 43 |
预期输出(作为 dataframe):
Name | Action | Number of Actions | Previous Value |
---|---|---|---|
Nancy | Action2 | 75 | 67 |
回答1
你可以试试https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html
df = (df2.merge(df1, on=['Name', 'Action'], how='left')
.rename(columns={'Number of Actions_x': 'Number of Actions', 'Number of Actions_y': 'Previous Value'})
.loc[lambda df: df['Number of Actions'].ne(df['Previous Value'])]
.dropna()
)
print(df)
Name Action Number of Actions Previous Value
1 Nancy Action2 75 67