python - 如何根据Python中行值的条件应用列中的值

标签 python pandas datetime dataframe merge

我有一个如下所示的数据框:

df

    Name        year    week    date
0   Adam        2016    16  2016-04-24
1   Mary        2016    17  2016-05-01
2   Jane        2016    20  2016-05-22
3   Joe         2016    17  2016-05-01
4   Arthur      2017    44  2017-11-05   
5   Liz         2017    41  2017-10-15
6   Janice      2016    47  2016-11-27

我想创建列季节,以便 df['season'] 根据中的值指定季节 MAMOND

结果应该如下所示:

df_final

    Name        year    week    date      season
0   Adam        2016    16      2016-04-24 MAM
1   Mary        2016    17      2016-05-01 MAM
2   Jane        2016    20      2016-05-22 MAM
3   Joe         2016    17      2016-05-01 MAM
4   Arthur      2017    44      2017-11-05 OND 
5   Liz         2017    41      2017-10-15 OND
6   Janice      2016    47      2016-11-27 OND

本质上,低于 40week 值应与 MAM 配对,高于 40 的值应为 OND.

到目前为止我有这个:

condition =df.week < 40
df['season'] = df[condition][[i for i in df.columns.values if i not in   ['a']]].apply(lambda x: 'OND')

但它很笨重并且不会产生最终的响应。

谢谢。

最佳答案

使用numpy.where :

condition = df.week < 40
df['season'] = np.where(condition, 'MAM', 'OND')
print (df)
     Name  year  week        date season
0    Adam  2016    16  2016-04-24    MAM
1    Mary  2016    17  2016-05-01    MAM
2    Jane  2016    20  2016-05-22    MAM
3     Joe  2016    17  2016-05-01    MAM
4  Arthur  2017    44  2017-11-05    OND
5     Liz  2017    41  2017-10-15    OND
6  Janice  2016    47  2016-11-27    OND

编辑:

要将字符串转换为整数,请使用astype :

condition = df.week.astype(int) < 40

或转换列:

df.week = df.week.astype(int)
condition = df.week < 40

关于python - 如何根据Python中行值的条件应用列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689237/

相关文章:

python - 如何使用 pandas 计算字符串在列中出现的次数

python - Pandas fillna() 按特定顺序排列

python - 如何使用 Numba 优化随机 Runge-Kutta?

Python自定义排序,通过元组中两个元素的差异

python - 如何从PDF文件中提取文本?

vb.net - 将表示 24H 时间的字符串转换为 12H 时间 VB.NET

Pandas 数据框检查列中的日期是否小于自定义日期?

python - 在哪里可以获得 apache2/module 的 mod_wsgi.so 文件?

pandas - 为什么直方图数据的限制自动检测为 [nan, nan] 而不是丢弃 NaN?

mysql - 使用 SQL 选择动态 Unix 纪元时间