根据特定行获取熊猫的平均列数

时间:2020-09-26 11:00:52

标签: python pandas dataframe average

我有一个数据可以存储一天,一个月,三个月和一年中股票价值的变化百分比。

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. 将平均数据放入新的单行(而不是“ UNITY”,“ SSOM”,“ PNSC”)的单独的csv文件中,并将该组的每个时间段的平均值。

我已经尝试过df.mean(axis = 1),但这并不能解决问题。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

注意,我尚未测试以上代码,也不保证它会按原样工作