数据框行中内容的修剪/截断平均值
Posted
技术标签:
【中文标题】数据框行中内容的修剪/截断平均值【英文标题】:Trimmed/truncated mean for contents in a dataframe row 【发布时间】:2021-11-16 12:37:05 【问题描述】:我有一个数据框和一个字典。数据框的一列包含句子。我想从句子中取出每个单词,检查它是否在字典中并将其值分配给它。计算值(每个句子或行)的修剪/截断平均值(我在两端修剪 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()
并手动“修剪”它?
【问题讨论】:
【参考方案1】:当然,你可以使用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
【讨论】:
以上是关于数据框行中内容的修剪/截断平均值的主要内容,如果未能解决你的问题,请参考以下文章