python - 数据框行中内容的修剪/截断平均值
问题描述
我有一个数据框和一个字典。数据框的一列包含句子。我想从句子中取出每个单词,检查它是否在字典中并将其值分配给它。计算值(每个句子或行)的修剪/截断平均值(我在两端修剪 10%)并保存在额外的列中。
import pandas as pd
test_df = pd.DataFrame({
'_id': ['1a','2b','3c','4d'],
'column': ['und der in zu',
'Kompliziertereswort something',
'Lehrerin in zu [Buch]',
'Buch (Lehrerin) kompliziertereswort']})
test_dict=
{'und': 20,
'der': 10,
'in': 40,
'zu': 10,
'Kompliziertereswort': 2,
'Buch': 5,
'Lehrerin': 5}
计算算术平均值非常简单:
test_df['extra_col'] = (test_df['column'].str.split(expand=True)
.stack().astype(str)
.str.strip(string.punctuation)
.map(test_dict)
.astype(float)
.groupby(level=0)
.mean())
但是对于截断的平均值,我需要类似的东西:
from scipy import stats
m = stats.trim_mean(X, 0.1)
其中 X 是一个数组。是否可以使用(部分)我当前的代码来做到这一点,或者我应该手动scipy
使用和“修剪”它吗?.mean()
解决方案
当然,您可以使用GroupBy.agg
:
test_df['extra_col'] = (test_df['column'].str.split(expand=True)
.stack().astype(str)
.str.strip(string.punctuation)
.map(test_dict)
.astype(float)
.groupby(level=0)
.agg(stats.trim_mean, 0.1))
像传递 lambda 函数一样工作:
test_df['extra_col'] = (test_df['column'].str.split(expand=True)
.stack().astype(str)
.str.strip(string.punctuation)
.map(test_dict)
.astype(float)
.groupby(level=0)
.agg(lambda x: stats.trim_mean(x, 0.1)))
print (test_df)
_id column extra_col
0 1a und der in zu 20.0
1 2b Kompliziertereswort something NaN
2 3c Lehrerin in zu [Buch] 15.0
3 4d Buch (Lehrerin) kompliziertereswort NaN
推荐阅读
- gmail - 如何使用 gmail api 使用 3 个不同的 gmail 地址向同一用户发送 3 封邮件
- r - R数据表从不同的行添加列
- dataframe - 在比较 pyspark 中的两个数据帧时,如何找出新的内容和发生的变化?
- python - python - 如何连接列表中的两个索引
- ios - Deinit 从未调用自定义 UIView
- shell - 测试字符串外壳中现有的子字符串
- java - 如何在 java rest 模板客户端中修改部分 Content-Disposition
- python - 基于多个条件创建列的清洁方法
- python - 使用 WHILE 循环时如何解决 JSONDecodeError
- ios - ScrollView 对齐到中心