在下面的代码中, 对于给定的日期,我根据weight_normalized 获取名称。 8 月 1 日:根据选择的标准 C,有 3 个选项 A、B、C。 我想要的是将上面数据框中选择的 A 或 B 替换为 C。
df_data = pd.DataFrame(
{'date': ['2023-08-01', '2023-08-01', '2023-08-01', '2023-08-02', '2023-08-02', '2023-08-03', '2023-08-04', '2023-08-05'],
'weight_normalized': [0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.2, 0.7],
'Name': ['A', 'B', 'C', 'A', 'C',
'A', 'B', 'ABC']})
df_data = (df_data
.sort_values(["date", "weight_normalized", "Name"], ascending=[False, False, False])
.drop_duplicates(subset="date")
.drop(columns=["weight_normalized"])
)
预期输出数据帧:
df_data = pd.DataFrame(
{'date': ['2023-08-01', '2023-08-02', '2023-08-03', '2023-08-04', '2023-08-05'],
'Name': ['C', 'C', 'C', 'C', 'ABC']})
这就是您要找的吗:
df_data = (df_data
.sort_values(["date", "weight_normalized", "Name"], ascending=[False, False, False])
.drop_duplicates(subset="date", keep='first')
.drop(columns=["weight_normalized"])
)
# update Name column
df_data.loc[((df_data['Name'] == 'A') | (df_data['Name'] == 'B')), 'Name'] = 'C'
print(df_data)
输出:
date Name
7 2023-08-05 ABC
6 2023-08-04 C
5 2023-08-03 C
4 2023-08-02 C
2 2023-08-01 C