基于特定行获取Pandas中列的平均值

2024-09-28 01:22:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据,存储了一天、一个月、三个月和一年内股票价值的百分比变化

ID     daychange   monthchange   trimonthchange  yearchange
UNITY   0.001666     0.398450        0.411581    0.689139
SSOM  -0.033359     0.040816        1.174840    3.047619
PNSC  -0.004953    -0.053006        0.158677    0.224932
PICT  -0.002027    -0.069696        0.041143    0.310791
PIBTL  -0.014848     0.129362        0.459846    0.287100

我想得到:

  1. 基于ID名称的4个时间段的平均值。例如,“UNITY”、“SSOM”、“PNSC”将被分组,并计算每个时间段的平均值(即,集团的平均日变化、集团的平均月变化等)
  2. 将平均数据放入一个单独的csv文件中,包含一个新的单行(而不是“UNITY”“SSOM”“PNSC”)和组的每个时间段的平均值

我试过df.mean(axis = 1),但那不行

任何帮助都将不胜感激!谢谢


Tags: 数据idunity集团平均值百分比时间段pict
2条回答

您可能需要链接filtermean函数调用。因为您首先要选择一组要保留的行,所以需要过滤掉不需要保留的行。然后,使用新的数据集,您需要执行列平均

df.filter(lambda row: row.ID in ["UNITY", "SSOM", "PNSC"]).mean(axis = 1)

注意,我没有测试上面的代码,也不保证它能按原样工作

使用loc按标签(ID列)访问一组行,然后使用axis=0计算每个时间段列的平均值。创建一个带有组名的Series,并将以前的结果附加到其中(这样组名将成为dataframe中的第一列)。将Series放在一个列表中,然后当对组的迭代完成时,转换为dataframe。要将结果放在单独的csv文件中,请使用to_csv

import pandas as pd

GROUPS = [
    ["UNITY", "SSOM", "PNSC"],
    ["SSOM", "PICT", "PIBTL"],
    ["SSOM", "PNSC", "PIBTL"],
]

df = pd.read_csv("sample.csv", sep="\s+")
df = df.set_index("ID")

data = []
for g in GROUPS:
    group_mean = df.loc[g].mean(axis=0)
    serie = pd.Series({"groupName":"-".join(g)}).append(group_mean)
    data.append(serie)

data = pd.DataFrame(data)
print(data)
data.to_csv("output.csv", index=False)

数据的输出

         groupName  daychange  monthchange  trimonthchange  yearchange
0  UNITY-SSOM-PNSC  -0.012215     0.128753        0.581699    1.320563
1  SSOM-PICT-PIBTL  -0.016745     0.033494        0.558610    1.215170
2  SSOM-PNSC-PIBTL  -0.017720     0.039057        0.597788    1.186550

相关问题 更多 >

    热门问题