我有一個資料集,我希望某個陳述句僅應用于資料集中的特定行。我希望這僅適用于包含 [type] == 'aa' 的行,并對包含 [type] == 'bb' 的行應用第二條陳述句
資料
location type mig1 de mig2 re
ny aa 8/1/2021 10/1/2021 1/1/2022 2/1/2022
ny aa 8/1/2021 10/1/2021 1/1/2022 2/1/2022
ca aa 8/1/2021 10/1/2021 1/1/2022 2/1/2022
tx bb 9/1/2021 11/1/2021 2/1/2022 3/1/2022
想要的
#Date 8/1/2022 is input, which yields:
location type mig1 de mig2 re
ny aa 03/1/2022 05/1/2022 8/1/2022 7/1/2022
ny aa 03/1/2022 05/1/2022 8/1/2022 7/1/2022
ca aa 03/1/2022 05/1/2022 8/1/2022 7/1/2022
tx bb 03/1/2021 11/1/2021 08/1/2022 3/1/2022
Logic - we see that the shift applies to all columns when the type == aa
when the type value == bb, a different statement is applied
正在做
#獲取輸入值
datevalue = pd.to_datetime(input("Enter shift: "))
#shifts 日期從 datevalue 輸入 - 但是我希望d變數只應用于包含 [type] == 'aa' 的行
#將e變數應用于包含 [type] = 'bb' 的行
d = {
'mig1': pd.DateOffset(months=5),
'de': pd.DateOffset(months=3),
're': pd.DateOffset(months=1),
}
e = {
'mig1': pd.DateOffset(months=5),
}
s = pd.Series(d).rsub(datevalue)
df.assign(**{**s, 'mig2': datevalue})
任何建議表示贊賞
uj5u.com熱心網友回復:
嘗試:
datevalue = pd.to_datetime(input("Enter shift: "), dayfirst=False) # 08/01/2022
new_values = pd.Series(d).rsub(datevalue) \
.append(pd.Series({'mig2': datevalue})) \
.dt.strftime('%-m/%-d/%Y')
df.update(pd.DataFrame([new_values], index=df[df['type'] == 'aa'].index))
# do the same for type='bb' and 'e' dict
new_values = pd.Series(e).rsub(datevalue) \
.append(pd.Series({'mig2': datevalue})) \
.dt.strftime('%-m/%-d/%Y')
df.update(pd.DataFrame([new_values], index=df[df['type'] == 'bb'].index))
輸出:
>>> df
location type mig1 de mig2 re
0 ny aa 3/1/2022 5/1/2022 8/1/2022 7/1/2022
1 ny aa 3/1/2022 5/1/2022 8/1/2022 7/1/2022
2 ca aa 3/1/2022 5/1/2022 8/1/2022 7/1/2022
3 tx bb 3/1/2022 11/1/2021 8/1/2022 3/1/2022
uj5u.com熱心網友回復:
#Coerce dates to datetime
df1=df1.set_index(['location','type']).apply(lambda x: pd.to_datetime(x,format='%d/%m/%Y'))
#Set non dates as index, slice level two and impose the datetifference
df1.loc[ ( slice(None), 'aa' ), : ]=df1.loc[ ( slice(None), 'aa' ), : ]-pd.to_timedelta(5, unit='d')
mig1 de mig2 re
location type
ny aa 2021-01-03 2021-01-05 2021-12-27 2021-12-28
aa 2021-01-03 2021-01-05 2021-12-27 2021-12-28
ca aa 2021-01-03 2021-01-05 2021-12-27 2021-12-28
tx bb 2021-01-09 2021-01-11 2022-01-02 2022-01-03
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/397950.html
