【问题标题】:How to fill new values in a data frame column based on some condition from other column如何根据其他列的某些条件在数据框列中填充新值
【发布时间】:2019-12-22 15:34:17
【问题描述】:

如何根据其他列的某些条件在数据框中填充新值

例如。我想在 y 列中将时间为 11:30 的行填充为回归列中的值 1,而那些时间为 11:25 的日期应在回归列中填充值为 2。

如何做到这一点?

input_df["ds"] 列的类型是pandas.core.series.Series

输入_df

            ds             y    regressor
0   2019-10-04 11:30:00    a       0
1   2019-10-04 11:35:00    b       0
2   2019-10-04 11:40:00    c       0
3   2019-10-04 11:25:00    d       0
4   2019-10-04 11:50:00    e       0
.
.
.
n   2019-14-04 11:50:00    f       0

输出_df

            ds             y    regressor
0   2019-10-04 11:30:00    a       1
1   2019-10-04 11:35:00    b       0
2   2019-10-04 11:40:00    c       0
3   2019-10-04 11:25:00    d       2
4   2019-10-04 11:50:00    e       0
.
.
.
n   2019-14-04 11:50:00    f       0

'''

【问题讨论】:

  • 要检查多少个值?你试过什么?你读过熊猫文档吗?这好像是 pandas 101。不仅如此,这类问题已经被问了几十次了。

标签: python pandas dataframe datetime if-statement


【解决方案1】:

您应该使用嵌套的np.where,它充当 if-else 函数:

input_df['regressor'] = np.where(input_df['ds'].dt.time=='11:30:00',
                                 1, 
                                 np.where(input_df['ds'].dt.time=='11:25:00',
                                          2, 
                                          input_df['regressor'])) 

【讨论】:

  • 这比使用.loc[].map等更好吗?
  • @AMC 对我来说它更直观,但就性能而言,我不知道哪个更好。检查它可能会很有趣
  • 直觉是什么意思?一旦有 4 个以上的条件/值,这将成为嵌套的噩梦。
  • 是的,但这里不是这样。另外,如果您有很多条件,您如何使用地图?恕我直言,他们都变得一团糟
  • 对于这种特殊情况,我正在考虑将.map() 与字典一起使用。保持字典定义简洁很容易,因为您可以非常自然地每行放置一个键:值对。
猜你喜欢
  • 2020-09-14
  • 2020-03-16
  • 2020-02-04
  • 1970-01-01
  • 2019-06-06
  • 2017-12-26
  • 2021-06-19
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多