我有一個資料集如下
Cty A1
AA A123
AA 1111
AA 99999
BB a9999
BB 345689
BB 345699
CC 1233
我需要按國家/地區對資料進行分組,并針對每個國家/地區確定 A1 和 A2 列的平均字符長度。
因此對于國家 AA,我們看到 A1 列中的 3 行有 13 個字符,在計算平均值時我們會得到 4.333(即 13 / 3),同樣的方式對于 B,我們會得到平均值 5.66
我使用下面的代碼來實作相同的
df = (df.groupby('Cty')['A1'].apply(lambda x: np.mean(x.str.len())).reset_index(name='mean_len_text'))
但得到以下錯誤
~\anaconda3\lib\site-packages\pandas\core\strings\accessor.py in __init__(self, data)
152 from pandas.core.arrays.string_ import StringDtype
153
--> 154 self._inferred_dtype = self._validate(data)
155 self._is_categorical = is_categorical_dtype(data.dtype)
156 self._is_string = isinstance(data.dtype, StringDtype)
~\anaconda3\lib\site-packages\pandas\core\strings\accessor.py in _validate(data)
215
216 if inferred_dtype not in allowed_types:
--> 217 raise AttributeError("Can only use .str accessor with string values!")
218 return inferred_dtype
219
AttributeError: Can only use .str accessor with string values!
我嘗試將列轉換為字串并按如下方式運行,但出現屬性錯誤
df = (df.groupby('Cty')['A1'].astype(str).str.apply(lambda x: np.mean(x.str.len())).reset_index(name='mean_len_text'))
Error msg
AttributeError: 'SeriesGroupBy' object has no attribute 'astype'
想法是將每個國家/地區的平均字符長度放在單獨的列中。
不知道該怎么做
幫助將不勝感激。
uj5u.com熱心網友回復:
您可以使用GroupBy.mean傳遞df['Cty']作為 grouper:
df['A1'].astype(str).str.len().groupby(df['Cty']).mean()
注意。如果您已經有字串,則可以跳過轉換為字串。
輸出:
Cty
AA 4.333333
BB 5.666667
CC 4.000000
Name: A1, dtype: float64
注意。如果你想要一個 DataFrame,添加你的.reset_index(name='mean_len_text')
您的方法的修復可能是:
df.groupby('Cty')['A1'].apply(lambda x: x.str.len().mean())
但這應該會大大降低效率。
uj5u.com熱心網友回復:
您可以傳遞Series給groupby,因此解決方案應該通過Series.astypewithSeries.str.len然后每個df['Cty']聚合來簡化mean:
df1 = (df['A1'].astype(str)
.str.len()
.groupby(df['Cty'])
.mean()
.reset_index(name='mean_len_text'))
替代解決方案是首先創建列mean_len_text,DataFrame.assign然后聚合mean:
df1 = (df.assign(mean_len_text = df['A1'].astype(str)
.str.len())
.groupby('Cty', as_index=False)['mean_len_text']
.mean())
您使用 lambda 函式的解決方案和astype:
df1 = (df.groupby('Cty')['A1']
.apply(lambda x: x.astype(str).str.len().mean())
.reset_index(name='mean_len_text'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485527.html
標籤:python-3.x 熊猫 拉姆达 熊猫-groupby
上一篇:python中的三角函式范圍
