通过选择 Pandas 中的其他列来更新条件列值

Posted

技术标签:

【中文标题】通过选择 Pandas 中的其他列来更新条件列值【英文标题】:Update the columns values on condition by selecting other column in 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

【问题讨论】:

【参考方案1】:

您可以将groupbytransformmin 值:

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' 对不起,我假设国家和日期是您数据框中的列。查看我的编辑,并将索引(括号中带有字符串)替换为您的列名。 请在您的代码示例中添加说明以改进此答案。

以上是关于通过选择 Pandas 中的其他列来更新条件列值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:如果条件[重复],则从另一列更新列值

如何通过在配置单元的分区表中选择另一列来覆盖列值

有没有一种有效的方法来计算 Pandas 中的列值,使用基于其他列的条件值的前行的值?

Pandas:如何根据其他列值的条件对列进行求和?

通过正则表达式选择列来更改 Pandas 列的数据类型

通过使用 HDFStore 比较列来选择行