我有一个如下所示的数据框:
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']
根据中的值指定季节 MAM
或 OND
周
。
结果应该如下所示:
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
本质上,低于 40
的 week
值应与 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/