在下表中,如果符合条件,我将尝试更改“值”列中的数字。
条件:如果标识符A_xcxcxcis的“日期” <'05 / 05/2021',则A_xcxcxc和DAB_bcbcbc(其下一行)的“值”都将更改为零,否则两个值将保持不变(两个行彼此链接)。
然后它将对BAB_bnbnb,CCC_eetr,D_tyty等执行相同的检查。我已经在下表中显示了预期的答案。
***必须对原始表格进行一些修改
新表格:
import pandas as pd
df = pd.DataFrame({'IDENTIFIER': ['A_xcxcxc', 'DAB_bcbcbc', 'BAB_bnbnb', 'XYZ_ererte', 'CCC_eetr', 'CZc_rgrg', 'D_tyty', 'sdD_wewerw', 'sdE_tyty', 'Esd_fhg'],
'income': [-30362100.0, 200000.0, -21248077.5, 150000.0, -33843389.2, 200000.0, -40229279.75, 250000.0, -22111384.6, 200000.0],
'Date' : ['03/03/2021', '22/01/2060', '04/03/2021', '22/07/2068', '08/03/2021', '22/11/2065', '05/04/2021', '22/03/2052', '15/10/2025', '22/07/2065']
})
预期答案:
答案 0 :(得分:2)
我想你想要
df.loc[pd.to_datetime(df['Date'], format='%d/%m/%Y')
.groupby(df['IDENTIFIER'].str.split('_').str[0])
.transform('first')
.lt(pd.to_datetime('05/05/2021', format='%d/%m/%Y')), 'income'] = 0
print(df)
IDENTIFIER income Date
0 A_xcxcxc 0.0 03/03/2021
1 A_bcbcbc 0.0 22/01/2060
2 B_bnbnb 0.0 04/03/2021
3 B_ererte 0.0 22/07/2068
4 C_eetr 0.0 08/03/2021
5 C_rgrg 0.0 22/11/2065
6 D_tyty 0.0 05/04/2021
7 D_wewerw 0.0 22/03/2052
8 E_tyty -22111384.6 15/10/2025
9 E_fhg 200000.0 22/07/2065
如果要每两行分组一次:
df.loc[pd.to_datetime(df['Date'], format='%d/%m/%Y')
.groupby(np.arange(df.shape[0])//2)
.transform('first')
.lt(pd.to_datetime('05/05/2021', format='%d/%m/%Y')), 'income'] = 0
print(df)