Pandas - 通过计算不规则字符串模式创建新列

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


|           Data           | 

----------------------------    

|   10-9   8-6    100-2    |

----------------------------

|           1-2    3-4     |

----------------------------

|                  55-45   |

----------------------------

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


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


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


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


我猜我需要使用某种 lambda 函数,但我不确定如何去做。


任何帮助表示赞赏。谢谢!


波斯汪
浏览 81回答 2
2回答

翻翻过去那场雪

制作一个包含字符串解析逻辑的函数:import pandas as pdimport numpy as npdef 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']

繁花不似锦

这可能会奏效。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.6666671    -1.0000002    10.000000Name: Data, dtype: float64希望这可以帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python