Trimmed/truncated 表示数据框行中的内容
Trimmed/truncated mean for contents in a dataframe row
我有一个数据框和一本字典。数据框的一列包含句子。我想从句子中取出每个单词,检查它是否在字典中并为其赋值。计算值(每个句子或行)的 trimmed/truncated 平均值(其中我 trim 两端均为 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()
和“trim”?
当然,您可以使用 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
我有一个数据框和一本字典。数据框的一列包含句子。我想从句子中取出每个单词,检查它是否在字典中并为其赋值。计算值(每个句子或行)的 trimmed/truncated 平均值(其中我 trim 两端均为 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()
和“trim”?
当然,您可以使用 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