【问题标题】:Update the columns values on condition by selecting other column in Pandas通过选择 Pandas 中的其他列来更新条件列值
【发布时间】:2020-12-12 22:40:14
【问题描述】:

我想用特定国家的最早日期更新日期列。例如,在法国国家日期列的所有行中,我想要 16/03/2020,这是法国最早的。如何更新特定行的值以保持法国不变?

85  China   23/01/2020
111 France  NaN
112 France  27/03/2020
113 France  NaN
114 France  20/03/2020
115 France  NaN
116 France  NaN
117 France  NaN
118 France  NaN
119 France  NaN
120 France  16/03/2020
139 Iran    15/03/2020
143 Italy   11/03/2020
217 Spain   14/03/2020

【问题讨论】:

    标签: python pandas numpy jupyter-notebook


    【解决方案1】:

    您可以将groupby 和transform 与min 值:

    df["Date"] = pd.to_datetime(df["Date"], format="%d/%m/%Y")
    df["Date"] = df.groupby("Country")["Date"].transform("min")
    
    print (df)
    
         id Country       Date
    0    85   China 2020-01-23
    1   111  France 2020-03-16
    2   112  France 2020-03-16
    3   113  France 2020-03-16
    4   114  France 2020-03-16
    5   115  France 2020-03-16
    6   116  France 2020-03-16
    7   117  France 2020-03-16
    8   118  France 2020-03-16
    9   119  France 2020-03-16
    10  120  France 2020-03-16
    11  139    Iran 2020-03-15
    12  143   Italy 2020-03-11
    13  217   Spain 2020-03-14
    

    【讨论】:

    • 法国日期列的所有行都应该有最小日期。但是这里法国的不同行有不同的日期,不是最小的
    【解决方案2】:
    country_earliest_dt_dct = df.groupby('country').apply(lambda x: x.min())['date'].to_dict()
    df['date'] = df['country'].apply(lambda x: country_earliest_dt_dct[x])
    

    【讨论】:

    • AttributeError: 'Series' 对象没有属性 'date'
    • 对不起,我假设国家和日期是您数据框中的列。查看我的编辑,并将索引(括号中带有字符串)替换为您的列名。
    • 请在您的代码示例中添加说明以改进此答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2018-05-13
    • 1970-01-01
    相关资源
    最近更新 更多