【问题标题】:Pandas - Create new column from calculation over irregular string patternsPandas - 通过计算不规则字符串模式创建新列
【发布时间】:2019-09-10 21:28:56
【问题描述】:

我在 pandas 数据框中有一些数据,如下所示:

|           Data           | 
----------------------------    
|   10-9   8-6    100-2    |
----------------------------
|           1-2    3-4     |
----------------------------
|                  55-45   |
----------------------------

现在我的问题是,使用 pandas 执行以下操作的最佳方法是什么:

  • 计算连字符前第一个数字的平均值,以及连字符后数字的平均值。

  • 从第一个减去第二个,然后放入一个新列。

例如,对于第一行,新列中的值将是:average(10, 8, 100) - average(9, 6, 2)

我猜我需要使用某种 lambda 函数,但我不知道该怎么做。

感谢任何帮助。谢谢!

【问题讨论】:

  • 那是单列数据吗?您会创建代码来创建输入数据框吗?

标签: python regex pandas


【解决方案1】:

制作一个包含字符串解析逻辑的函数:

import pandas as pd
import numpy as np

def string_handling(string):
    values = [it for it in string.strip().split(' ') if it]
    values = [v.split('-') for v in values]
    first_values = [int(v[0]) for v in values]
    second_values = [int(v[1]) for v in values]
    return pd.Series([np.mean(first_values), np.mean(second_values)])

应用函数:

df[['first_value','second_value']] = df['Data'].apply(string_handling)
df['diff'] = df['first_value'] - df['second_value']

【讨论】:

  • 感谢非常明确的回答,我会尝试将其纳入我的项目中。
  • @ConvexLeopard 很高兴我能帮上忙。
【解决方案2】:

这可能会奏效。 split() 将摆脱所有的空白。还使用列表推导来遍历split() 创建的所有标记(例如['10-9', '8-6', '100-2'])。

In [37]: df = DataFrame({'Data': ["   10-9   8-6    100-2    ",
                         "           1-2    3-4     ", 
                         "                  55-45   "]})

In [38]: def process(cell):
    ...:     avg = []
    ...:     for i in range(2):
    ...:         l = [int(x.split("-")[i]) for x in cell.split()]
    ...:         avg.append(sum(l) * 1. / len(l))
    ...:     return avg[0] - avg[1]
    ...:

In [39]: df['Data'].apply(process)
Out[39]:
0    33.666667
1    -1.000000
2    10.000000
Name: Data, dtype: float64

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2021-10-09
    • 2018-01-24
    相关资源
    最近更新 更多