我有一个带有数组的数据框。示例:
df = pd.DataFrame([('a', [1,2,3]), ('b', [4,5,6])], columns=['name', 'values'])
name values
0 a [1, 2, 3]
1 b [4, 5, 6]
我知道values
col数组的长度相同。
我想计算value数组的axis = 0上的平均值。
在numpy中,我可以这样做:
np.array([[1,2,3], [4,5,6]]).mean(axis=0) # result: array([2.5, 3.5, 4.5])
大熊猫有可能吗?
如果没有,我如何轻松将值col转换为numpy数组?
我已经尝试过df['values'].values
,但这没有给出矩阵:
array([list([1, 2, 3]), list([4, 5, 6])], dtype=object)
答案 0 :(得分:3)
使用pandas series.tolist将熊猫系列转换为列表
np.array(df['values'].tolist()).mean(axis = 0)
#o/p
array([2.5, 3.5, 4.5])
答案 1 :(得分:0)
如果您只想处理一列,则可以在相关列上使用apply
。 apply
(例如列)上的pd.Series
适用于每个元素。
例如:
df = pd.DataFrame([('a', [1,2,3]), ('b', [4,5,6])], columns=['name', 'values'])
df['values_mean'] = df['values'].apply(lambda x: np.mean(x, axis=0))
df
收益:
name values values_mean
0 a [1, 2, 3] 2.0
1 b [4, 5, 6] 5.0
如果您有多于一列,则applymap
函数对每个元素pd.DataFrame
有效(而不是对数据列的apply
对每个元素有效)。例如:
df = pd.DataFrame([('a', [1,2,3]), ('b', [4,5,6])], columns=['name', 'values'])
df[['values']].applymap(lambda x: np.mean(x, axis=0))
收益:
values
0 2.0
1 5.0
答案 2 :(得分:0)
这是一种方法
pd.DataFrame(df['values'].tolist()).mean()
Out[336]:
0 2.5
1 3.5
2 4.5
dtype: float64