添加具有另一列值的 len() 的 DataFrame 列

Posted

技术标签:

【中文标题】添加具有另一列值的 len() 的 DataFrame 列【英文标题】:Adding a DataFrame column with len() of another column's values 【发布时间】:2015-07-04 08:39:19 【问题描述】:

我在尝试获取另一列中字符串值的字符计数列时遇到问题,并且还没有弄清楚如何有效地做到这一点。

for index in range(len(df)):
    df['char_length'][index] = len(df['string'][index]))

这显然涉及首先创建一列空值,然后重写它,这在我的数据集上需要很长时间。那么获得类似的东西的最有效方法是什么

'string'     'char_length'
abcd          4
abcde         5

我查了好久,还是没弄明白。

【问题讨论】:

【参考方案1】:

Pandas 为此有一个vectorised string method:str.len()。要创建新列,您可以编写:

df['char_length'] = df['string'].str.len()

例如:

>>> df
  string
0   abcd
1  abcde

>>> df['char_length'] = df['string'].str.len()
>>> df
  string  char_length
0   abcd            4
1  abcde            5

这应该比使用 Python for 循环遍历 DataFrame 快得多。

许多其他熟悉的 Python 字符串方法已被引入到 Pandas。例如,lower(用于转换为小写字母),count 用于计算特定子字符串的出现次数,replace 用于将一个子字符串与另一个交换。

【讨论】:

【参考方案2】:

这是一种方法。

In [3]: df
Out[3]:
  string
0   abcd
1  abcde

In [4]: df['len'] = df['string'].str.len()

In [5]: df
Out[5]:
  string  len
0   abcd    4
1  abcde    5

【讨论】:

以上是关于添加具有另一列值的 len() 的 DataFrame 列的主要内容,如果未能解决你的问题,请参考以下文章

根据另一列的字段值选择具有相同列值的行

Laravel - 查询构建器以选择具有唯一列值的多行(具有另一列的最大值)

PySpark - 添加一个递增的数字列,该列根据另一列值的变化重置为 1

SQL 查询以查找具有相同列值的多行

laravel 基于另一列值的唯一验证规则

如何使用 mySQL 返回另一列中每个值的最常见列值?