我正在從具有“anual_quarters”作為每個季度每個資料點的列名稱和值的資料創建資料時間列。
我正在考慮創建一個自定義函式并使用 .apply 回傳我可以使用的資料。但我似乎無法撰寫一個使用 iterrows() 和 iteritems() 迭代資料的每一行/列的函式
這是我嘗試的最后一件事。
from datetime import datetime
def get_recent_orders(merged_data):
for index, row in merged_data.iteritems():
if row['q4_sales_2021'] > 0:
return datetime(2021, 10, 1)
elif row['q3_sales_2021'] > 0:
return datetime(2021, 7, 1)
elif row['q2_sales_2021'] > 0:
return datetime(2021, 4, 1)
elif row['q1_sales_2021'] > 0:
return datetime(2021, 1, 1)
elif row['q4_sales_2020'] > 0:
return datetime(2020, 10, 1)
elif row['q3_sales_2020'] > 0:
return datetime(2020, 7, 1)
elif row['q2_sales_2020'] > 0:
return datetime(2020, 4, 1)
elif row['q1_sales_2020'] > 0:
return datetime(2020, 1, 1)
else:
return None
merged_data['last_order'] = merged_data.apply(get_recent_orders, axis=0)
uj5u.com熱心網友回復:
使用numpy.select:
import numpy as np
conditions = [merged_data['q4_sales_2021'].gt(0),
merged_data['q3_sales_2021'].gt(0),
merged_data['q2_sales_2021'].gt(0),
merged_data['q1_sales_2021'].gt(0),
merged_data['q4_sales_2020'].gt(0),
merged_data['q3_sales_2020'].gt(0),
merged_data['q2_sales_2020'].gt(0),
merged_data['q1_sales_2020'].gt(0)]
choices = [datetime(2021, 10, 1),
datetime(2021, 7, 1),
datetime(2021, 4, 1),
datetime(2021, 1, 1),
datetime(2020, 10, 1),
datetime(2020, 7, 1),
datetime(2020, 4, 1),
datetime(2020, 1, 1)]
merged_data["last_order"] = np.select(conditions, choices, None)
uj5u.com熱心網友回復:
與np.select:
condlist = [df['q4_sales_2021'] > 0,
df['q3_sales_2021'] > 0,
df['q2_sales_2021'] > 0,
df['q1_sales_2021'] > 0,
df['q4_sales_2020'] > 0,
df['q3_sales_2020'] > 0,
df['q2_sales_2020'] > 0,
df['q1_sales_2020'] > 0]
choicelist = [datetime(2021, 10, 1),
datetime(2021, 7, 1),
datetime(2021, 4, 1),
datetime(2021, 1, 1),
datetime(2020, 10, 1),
datetime(2020, 7, 1),
datetime(2020, 4, 1),
datetime(2020, 1, 1)]
default = pd.NAT
merged_data['last_order'] = np.select(condlist, choicelist, default)
uj5u.com熱心網友回復:
你可以這樣做:
df = pd.DataFrame(data={"annual_quarters": ["q4_sales_2021", "q3_sales_2021", "q2_sales_2021", "q1_sales_2021",
"q4_sales_2020", "q3_sales_2020", "q2_sales_2020", "q1_sales_2020"]})
import datetime as dt
def get_recent_orders(quarter):
month_list = [1, 4, 7, 10]
month = month_list[int(str(quarter)[1])-1]
year = int(str(quarter)[-4:])
return dt.date(year, month, 1)
df["last_order"] = df["annual_quarters"].apply(get_recent_orders)
由于月份將是 Jan、Apr、Jul 或 Oct,具體取決于 Q1、2、3 或 4,您可以datetime.date通過從第二個字串字符中查找月份值、從最后 4 個字符中查找年份和 day = 1 來回傳 a。這樣,根本不需要遍歷行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452698.html
