【问题标题】:Pandas renaming all consecutive rows based on condition熊猫根据条件重命名所有连续行
【发布时间】:2017-12-25 20:24:10
【问题描述】:

我有类似的数据框:

您可以使用以下代码重新创建它:

import pandas as pd
df = pd.DataFrame({
    'A' : 1.,
    'name' :  pd.Categorical(["hello","hello","hello","hello"]),
    'col_2' : pd.Categorical(["2","2","12","Nan"]),
    'col_3' : pd.Categorical(["11","1","3","Nan"])})

我想将“col_2”或“col_3”大于10的每一行中的“name”值更改。

因此,如果“col_2”或“col_3”中有大于 10 的数字,则应重命名直到下一个大于 10 的数字的所有行。

最后应该是这样的:

【问题讨论】:

  • 你为什么使用 pd.Categorical?

标签: python python-3.x pandas cumsum


【解决方案1】:

你可以通过cumsum实现它

name_index = df[['col_2', 'col_3']]\
    .apply(pd.to_numeric, errors='coerce')\ 
    .ge(10)\
    .any(axis=1)\
    .cumsum()
df['name'] = df['name'].astype(str) + '_' + name_index.astype(str)
print(df)

    A    col_2  col_3   name
0   1.0  2      11      hello_1
1   1.0  2      1       hello_1
2   1.0  12     3       hello_2
3   1.0  NaN    NaN     hello_2

【讨论】:

  • @AntonBR 我同意你的看法,但仅限于输入数据中不包含“Nan”字符串的情况:)
  • 不错!我冒昧地做了一些小改动 (pd.to_numeric) 和 .ge()
  • 哇,没注意到errors='coerce'。现在看起来真的好多了。谢谢
  • 非常好。非常感谢!
猜你喜欢
  • 2019-09-15
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 2019-11-03
  • 2019-04-19
  • 2021-09-11
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多