我有一个数据可以存储一天,一个月,三个月和一年中股票价值的变化百分比。
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
我想得到:
我已经尝试过df.mean(axis = 1)
,但这并不能解决问题。
任何帮助将不胜感激!谢谢
答案 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)
您可能需要链接filter
和mean
函数调用。由于您首先要选择一组要保留的行,因此需要过滤掉不需要的行。然后,对于新的数据集,您要执行列平均。
df.filter(lambda row: row.ID in ["UNITY", "SSOM", "PNSC"]).mean(axis = 1)
注意,我尚未测试以上代码,也不保证它会按原样工作