簡體   English   中英

如何從迭代兩個數據幀中提取特定值並動態地提取 Append?

[英]How to Extract Specific Values from Iterating Through Two Dataframes and Dynamically Append?

我正在嘗試使用現有 dataframe 中的值來創建子集數據幀(或系列)並將這些值與現有的 dataframe 進行比較,以最終在原始 Z6A8064ZB55DF47945505700 中創建一個新列

逐步的過程是:

  • 創建一個 dataframe,它根據原始 dataframe、df1 中的日期隔離每個月內的最小日期(df2),這已成功創建。
  • 第二步是將actual_date (df1) 與min_date (df2) 匹配的位置進行匹配,然后將extract_value (df1) 存儲在 df1 中,以用於 actual_date 與min_date匹配的所有實例。

我已經采取但收到錯誤的一些嘗試是:比較 dfs 之間的日期值:

df1.loc[df1['actual_date']==df2[df2['min_date']]
#Produces unexpected EOF while parsing
df['actual_date']==df2['min_date']
#Produces ValueError: Can only compare identically-labeled Series objects

遍歷條件:

for each in range(len(df1):
    if df1[df1['actual_date']]==df2[df2['min_date']]:
        df1['exctract_value_new']=df2['extract_value']

#Produces: KeyError: "None of [DatetimeIndex....are in the [columns]"

我嘗試搜索值和鍵錯誤,但無法理解有關索引的線程。 具體來說,我不確定如何重新格式化 df1 和/或 df2 以這種方式比較日期值,然后根據兩個數據幀中的條件何時匹配來提取單獨的列。

以下是使用的示例數據:

df1(基礎)

實際日期 提取值
2021-01-22 22
2021-01-23 24
2021-01-24 15
2021-02-22 16
2021-02-05 34
2021-02-04 18

df2

min_date
2021-01-01 2021-01-22
2021-02-01 2021-02-04
2021-03-01 2021-03-01

df1 的最終目標

實際日期 min_date extract_value_new extract_value_original
2021-01-22 2021-01-22 22 22
2021-01-23 2021-01-22 22 24
2021-02-04 2021-02-04 18 18
2021-02-05 2021-02-04 18 34

感謝任何幫助!

您可能想查看pd.merge_asof ...solution 這里給了我想要的表!

merge_asof本質上讓我們加入兩列中“最接近”的值。

import pandas as pd
import requests
from datetime import datetime, timedelta


df1 = pd.read_csv('df1.csv')
df2 = pd.read_csv('df2.csv')

datetime_format = '%Y-%m-%d'  # format of date (needs to be a datetime to merge in pandas)
tolerance = timedelta(days=1)  # the tolerance to join dates on

# convert our dates
df1['actual_date'] = pd.to_datetime(df1['actual_date'], format=datetime_format)
df2['min_date'] = pd.to_datetime(df2['min_date'], format=datetime_format)

# sort...
df1.sort_values(by='actual_date', inplace=True)

out = pd.merge_asof(df1, df2, left_on='actual_date', right_on='min_date', tolerance=tolerance).dropna()

給我:

  actual_date  extract_value       month   min_date
0  2021-01-22             22  2021-01-01 2021-01-22
1  2021-01-23             24  2021-01-01 2021-01-22
3  2021-02-04             18  2021-02-01 2021-02-04
4  2021-02-05             34  2021-02-01 2021-02-04

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM