我有一個 df
df = pd.DataFrame(index = ['A','B','C','D','E'],
columns = ['date_1','date_2','value_2','value_3','value_4'],
data = [['2021-06-28', '2022-05-03', 30, 40, 60],
['2022-01-10', '2022-05-15', 50, 90, 70],
[np.nan, '2022-05-15', 40, 60, 80],
[np.nan, '2022-04-28', 40, 60, 90],
[np.nan, '2022-06-28', 50, 60, 54]])
date_1 date_2 value_2 value_3 value_4
A 2021-06-28 2022-05-03 30 40 60
B 2022-01-03 2022-05-15 50 90 70
C NaN 2022-05-15 40 60 80
D NaN 2022-04-28 40 60 90
...
E NaN 2022-06-28 50 60 54
我正在嘗試NaN在 column 中填充值date_1。我需要填寫該date_1列的min值每周都在變化,值的date_1值需要是2021-06-28,max值是2022-06-20。每周列中的max值date_1將是最后一個星期一。我需要的列date_1到每個日期高達2022-06-20至少一次,這樣每個日期從開始2021-06-28到2022-06-20將在date_1至少一次。這些值的順序無關緊要。
我試過:
from datetime import date, timedelta
today = date.today()
last_monday = pd.to_datetime((today - timedelta(days=today.weekday()) - timedelta(days=7)).strftime('%Y-%m-%d'))
# date_mappings is a dictionary with this kind of structure:
# {1 : '2021-06-28', 2 : '2021-07-05', ... 52 : '2022-06-20'}
dates_needed = [x for x in pd.to_datetime(list(date_mappings.values())) if x >= last_monday]
所以現在dates_needed剩下的日期需要在date_1列中至少添加一次。
我面臨的問題是當我嘗試填充值時形狀不匹配,因為可以有多行具有相同的date_2.
如果我嘗試使用:
df.loc[df['date_1'].isna(), 'date_1'] = dates_needed
我得到:
ValueError:使用可迭代設定時必須具有相等的 len 鍵和值
因為這僅在我匹配形狀時才有效:
df.loc[df['date_1'].isna(), 'date_1'] = [pd.to_datetime('2022-01-10 00:00:00'),
pd.to_datetime('2022-01-17 00:00:00'),
pd.to_datetime('2022-01-24 00:00:00')]
date_1 date_2 value_2 value_3 value_4
A 2021-06-28 2022-05-03 30 40 60
B 2022-01-10 2022-05-15 50 90 70
C 2022-01-10 2022-05-15 40 60 80
D 2022-01-17 2022-04-28 40 60 90
E 2022-01-24 2022-06-28 50 60 54
所以我的目標是從創建的串列中填寫NaN值,其中每個日期在列中至少使用一次,并且順序無關緊要。date_1dates_neededdates_neededdate_1
uj5u.com熱心網友回復:
這是date_mappings通過幫助器Index按缺失值數量按整數映射的解決方案sum。如果 dict 的長度與缺失值的數量之間存在差異,則解決方案有效:
m = df['date_1'].isna()
df.loc[m, 'date_1'] = (pd.Index(range(m.sum())) 1).map(date_mappings)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409843.html
標籤:
上一篇:按ID分組并選擇具有最新DATE1和最舊DATE2的行
下一篇:使用隨機噪聲將ID添加到資料幀
