Python:在数据框列表中计算标准差

3
我有一个包含50个数据框的列表 "list1",每个数据框都有 "Speed" 和 "Value" 两列,就像这样;
Speed   Value
1       12
2       17
3       19
4       21
5       25

我正在尝试获取所有数据框中每个速度的“Value”的标准偏差。最终目标是获得每个速度的标准偏差列表或DataFrame,如下所示:

Speed   Standard Deviation
1       1.23
2       2.5
3       1.98
4       5.6
5       5.77

我曾试图使用for循环将这些值提取到一个新的数据框中,然后对其使用'statistics.stdev'函数,但似乎无法正常工作。非常感谢任何帮助!
更新! pd.concat([d.set_index('Speed').values for d in df_power], axis=1).std(1) 这个方法可行。不过,我忘了提到Speed的值并不总是在各个数据框之间相同。有些数据框会少一些值,在这些情况下返回的结果是nan。

请包括尝试但未成功的部分。使用 pandas.concat() 不可行吗? - AMC
3个回答

3
如果所有的数据框都保存在同一个文件夹中,您可以使用pd.concat+groupby,如已建议的那样,或者您可以使用dask
import dask.dataframe as dd
import pandas as pd

df = dd.read_csv("data/*")
out = df.groupby("Speed")["Value"].std()\
        .compute()\
        .reset_index(name="Standard Deviation")

3
你可以使用 concatstd:
list_df = [df1, df2, df3, ...]
pd.concat([d.set_index('Speed') for d in list_dfs], axis=1).std(1)

OP写道,他想要计算所有数据框中特定速度的标准差。 - Omni
@Omni each 不是 一个具体的 - Quang Hoang
@Omni 这个答案实现了 OP 所要求的。 - piRSquared
2
@QuangHoang,然而,如果“'Speed'”在各个数据框中不是唯一的,我认为您会遇到麻烦。 - piRSquared
我需要每个速度的标准差,但是“'values'”不是数据框中唯一的列,因此我最终使用了StDev = pd.concat([d.set_index('Speed').values for d in df_power], axis=1).std(1)。尽管如此,我应该声明“Speed”的值并不总是相同的。有些数据框会缺少一些值,在这些情况下会返回nan。我会更新问题。谢谢@QuangHoang - Iceberg_Slim

3

您需要将数据框进行连接、分组并取标准差。

1) 将您的数据框连接(concatenate)在一起。

list1 = [df_1, df_2, ...]
full_df = pd.concat(list1, axis=0) # stack all dataframes

2) 按照 speed 进行分组,并计算标准偏差

std_per_speed_df = full_df.groupby('speed')[['value']].std()

3
[df for df in list1] 等同于 list1,因此只需执行 pd.concat(list1).groupby('speed').value.std() - piRSquared

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接