Python 数据帧中包含的序列的平均值
以下数据帧(df)有3列:Python 数据帧中包含的序列的平均值,python,pandas,dataframe,mean,series,Python,Pandas,Dataframe,Mean,Series,以下数据帧(df)有3列:事件、计数和长度,其中计数列包含一系列数字。我想估计每行计数的平均值并将其显示在第四行上 df = Event Counts Length 0 [111240.0, 110530.0, 108540.0, 108540.0, 10838... 5
事件
、计数
和长度
,其中计数
列包含一系列数字。我想估计每行计数的平均值
并将其显示在第四行上
df =
Event Counts Length
0 [111240.0, 110530.0, 108540.0, 108540.0, 10838... 5
7 [117240.0, 119160.0, 120160.0, 121950.0, 12195... 6
13 [180420.0, 180420.0, 183840.0, 183840.0, 18384... 6
16 [160260.0, 159430.0, 159430.0, 157720.0, 15955... 14
我测试了以下表达式,但没有成功
df['mean'] = df['counts'].mean(axis = 1)
以及基于这条线的其他变化
如果我理解正确,问题是由于Count
列包含多个元素
非常感谢您对这个显然很简单的问题的帮助。您可以使用Numpy,前提是它们的长度相同
df['Mean'] = np.mean(df['Counts'].tolist(), axis=1)
df
Event Counts Length Mean
0 0 [111240.0, 110530.0, 108540.0, 108540.0, 10838] 5 89937.6
1 7 [117240.0, 119160.0, 120160.0, 121950.0, 12195] 6 98141.0
2 13 [180420.0, 180420.0, 183840.0, 183840.0, 18384] 6 149380.8
3 16 [160260.0, 159430.0, 159430.0, 157720.0, 15955] 14 130559.0
否则
df['Mean'] = df['Counts'].apply(np.mean)
df
Event Counts Length Mean
0 0 [111240.0, 110530.0, 108540.0, 108540.0, 10838] 5 89937.6
1 7 [117240.0, 119160.0, 120160.0, 121950.0, 12195] 6 98141.0
2 13 [180420.0, 180420.0, 183840.0, 183840.0, 18384] 6 149380.8
3 16 [160260.0, 159430.0, 159430.0, 157720.0, 15955] 14 130559.0
以下是一种利用
numpy
阵列性能的方法:
import pandas as pd
df = pd.DataFrame([[[111240.0, 110530.0, 108540.0, 108540.0]],
[[117240.0, 119160.0, 120160.0, 121950.0]],
[[180420.0, 180420.0, 183840.0, 183840.0]],
[[160260.0, 159430.0, 159430.0, 157720.0]]], columns=['Counts'])
df['mean'] = np.mean(np.vstack(df['Counts'].values), axis=1)
# Counts mean
# 0 [111240.0, 110530.0, 108540.0, 108540.0] 109712.5
# 1 [117240.0, 119160.0, 120160.0, 121950.0] 119627.5
# 2 [180420.0, 180420.0, 183840.0, 183840.0] 182130.0
# 3 [160260.0, 159430.0, 159430.0, 157720.0] 159210.0
试试这个:df['mean']=df.Counts.map(lambda Counts:pd.Series(Counts.mean())您建议的第一个选项给了我这个错误:
索引器:元组索引超出范围
。但第二种选择奏效了。谢谢lot@jp_data_analysis我并不总是试图优化OP的代码。有时(特别是当他们不要求时),我会给他们看起来很直观的东西。@U新手几乎可以肯定,这是因为你在计数中的列表/数组长度不同,不能放入矩形数组中。这也是我提出第二种解决方案的原因。我很高兴它成功了。非常感谢两种选择。正如我的绰号所暗示的,我是Python/Pandas世界的新手。@the_新手作为新手没有什么丢脸的。你只需看我的第一个问题就知道我曾经和你在一起。显示了以下错误消息:ValueError:除了连接轴之外,所有输入数组维度都必须完全匹配,我猜这是因为每行的长度不同。我想和你分享这个。使用上一篇文章解决了这个问题。无论如何谢谢你!该错误是由于并非计数中的所有列表/数组长度相同。因此,Numpy不能使其成为矩形阵列。相反,它将其转换为一个一维列表数组,该数组在轴=1上运行。也就是说,调用np.vstack
是不需要的额外开销。对于小数据,这是更有效的np.mean(df['Counts'].values.tolist(),axis=1)
。从性能的角度来看也是很好的+从我这里得到1。