以编程方式修改 pandas 数据框

问题描述 投票:0回答:1

在下面的代码中, 对于给定的日期,我根据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']})
python pandas
1个回答
0
投票

这就是您要找的吗:

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
© www.soinside.com 2019 - 2024. All rights reserved.