Pandas/Python -合并2个 Dataframe ,使用列作为数据,使用行作为原始 Dataframe 中的额外行

xzlaal3s  于 2023-03-06  发布在  Python
关注(0)|答案(2)|浏览(132)

我有2个 Dataframe ,如下所示
df(包含索引、银行名称、银行储蓄APR的最后更改日期和uid,uid与索引相同,我在该列上进行了匹配试验)
| 指标|标题|上次更改友好|流体|
| - ------|- ------|- ------|- ------|
| 55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|
| 第一代第二代第三代第四代第三代第五代第四代第三代第五代第四代第三代第四代第五代第三代第四代第三代第五代第四代第三代第四代第三代第四代第三代第四代第五代第三代第四代第四代第三代第四代第三代第四代第三代第三代第四代第三代第三代第三代第四代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第|银行纯货币市场|1970年1月1日00时00分|第一代第二代第三代第四代第三代第五代第四代第三代第五代第四代第三代第四代第五代第三代第四代第三代第五代第四代第三代第四代第三代第四代第三代第四代第五代第三代第四代第四代第三代第四代第三代第四代第三代第三代第四代第三代第三代第三代第四代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第|
tempdf(包含索引,tempdf中的所有记录与df中的uid/index匹配,检索APR的日期,最后是对包含APR本身的文本文件的引用)
| 流体|时间_日期_友好|参考文献|
| - ------|- ------|- ------|
| 55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19时00分01秒|b866e03c-928b-4ea0-a293-5ae69fe88cfc.txt|
| 55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19:01:29|86c5ef05-fac0-4177-a347-8585299ecb88.txt|
| 55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月28日22时59分49秒|99c911bc-86be-4bd4-afdd-89acd279aaa1.txt|
我正在尝试从上面创建以下 Dataframe
| 指标|标题|上次更改友好|流体|时间_日期_友好|参考文献|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19时00分01秒|b866e03c-928b-4ea0-a293-5ae69fe88cfc.txt|
| 55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19:01:29|86c5ef05-fac0-4177-a347-8585299ecb88.txt|
| 55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月28日22时59分49秒|99c911bc-86be-4bd4-afdd-89acd279aaa1.txt|
我已经尝试了各种各样的连接、连接和合并的迭代,我得到了最接近的如下:
df =临时df. merge(df,方式="左侧",左侧打开="用户标识",右侧打开="用户标识")
但这会创建9行,而不是我试图得到的3行,如上所示。

xmd2e60i

xmd2e60i1#

df = pd.DataFrame([
    ["55e0f3b0-aacb-48a6-b71c-2fe282eb6e2e", "Republic Bank Digital Money Market", "2023-02-28 22:59:49", "55e0f3b0-aacb-48a6-b71c-2fe282eb6e2e"],
    ["af1d2fcd-5f09-4611-80c9-564fb346c875", "Bank Purely Money Market", "1970-01-01 00:00:00", "af1d2fcd-5f09-4611-80c9-564fb346c875"],
], columns = ["index", "title", "last_changed_friendly", "uid"])

| | 指标|标题|上次更改友好|流体|
| - ------|- ------|- ------|- ------|- ------|
| 无|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|
| 1个|第一代第二代第三代第四代第三代第五代第四代第三代第五代第四代第三代第四代第五代第三代第四代第三代第五代第四代第三代第四代第三代第四代第三代第四代第五代第三代第四代第四代第三代第四代第三代第四代第三代第三代第四代第三代第三代第三代第四代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第|银行纯货币市场|1970年1月1日00时00分|第一代第二代第三代第四代第三代第五代第四代第三代第五代第四代第三代第四代第五代第三代第四代第三代第五代第四代第三代第四代第三代第四代第三代第四代第五代第三代第四代第四代第三代第四代第三代第四代第三代第三代第四代第三代第三代第三代第四代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第三代第三代第四代第三代第四代第三代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第三代第四代第四代第三代第四代第三代第三代第四代第三代第四代第|

tempdf = pd.DataFrame([
    ["55e0f3b0-aacb-48a6-b71c-2fe282eb6e2e", "2023-02-18 19:00:01", "b866e03c-928b-4ea0-a293-5ae69fe88cfc.txt"],
    ["55e0f3b0-aacb-48a6-b71c-2fe282eb6e2e", "2023-02-18 19:01:29", "86c5ef05-fac0-4177-a347-8585299ecb88.txt"],
    ["55e0f3b0-aacb-48a6-b71c-2fe282eb6e2e", "2023-02-28 22:59:49", "99c911bc-86be-4bd4-afdd-89acd279aaa1.txt"],
], columns=["uid", "time_date_friendly", "Reference"])

| | 流体|时间_日期_友好|参考文献|
| - ------|- ------|- ------|- ------|
| 无|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19时00分01秒|b866e03c-928b-4ea0-a293-5ae69fe88cfc.txt|
| 1个|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19:01:29|86c5ef05-fac0-4177-a347-8585299ecb88.txt|
| 第二章|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月28日22时59分49秒|99c911bc-86be-4bd4-afdd-89acd279aaa1.txt|

df.merge(tempdf, on='uid')

| | 指标|标题|上次更改友好|流体|时间_日期_友好|参考文献|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 无|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19时00分01秒|b866e03c-928b-4ea0-a293-5ae69fe88cfc.txt|
| 1个|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月18日19:01:29|86c5ef05-fac0-4177-a347-8585299ecb88.txt|
| 第二章|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|共和银行数字货币市场|2023年2月28日22时59分49秒|55e0f3b0-乙酰氨基苯-48a6-乙酰氨基苯-71c-二铁-282eb6e2e|2023年2月28日22时59分49秒|99c911bc-86be-4bd4-afdd-89acd279aaa1.txt|

jv4diomz

jv4diomz2#

尝试合并uid列上的两个 Dataframe ,然后基于last_changed_friendly和time_date_friendly列过滤生成的 Dataframe 。
代码:

merged_df = pd.merge(df, tempdf, on='uid')
filtered_df = merged_df[merged_df['last_changed_friendly'] == merged_df['time_date_friendly']]

这段代码首先使用pd. merge()函数合并uid列上的两个 Dataframe 。得到的 Dataframe 将包含来自两个 Dataframe 的所有列。然后,我们过滤这个合并的 Dataframe ,只包含last_changed_friendly列与time_date_friendly列匹配的行。这确保我们只保留APR在我们检索它的同一天最后一次更改的行。
请注意,这里假设last_changed_friendly和time_date_friendly列采用相同的日期格式。如果它们不相同,您可能需要在过滤 Dataframe 之前将它们转换为相同的格式。

相关问题