Python 多指标熊猫月气候学数据框架
我有一个包含两年每月数据的数据框架Python 多指标熊猫月气候学数据框架,python,pandas,mean,multi-index,Python,Pandas,Mean,Multi Index,我有一个包含两年每月数据的数据框架Y。我需要第二列Y_avg和气候学,以便能够两者相减 Y Y_avg T X 2000-01-31 1 51 63 2 52 64 2000-02-29 1 53 65 2 54 66 2000-03-31 1 55 67 2 56 68 2000-04-30 1 57 69 2 58
Y
。我需要第二列Y_avg
和气候学,以便能够两者相减
Y Y_avg
T X
2000-01-31 1 51 63
2 52 64
2000-02-29 1 53 65
2 54 66
2000-03-31 1 55 67
2 56 68
2000-04-30 1 57 69
2 58 70
2000-05-31 1 59 71
2 60 72
2000-06-30 1 61 73
2 62 74
2000-07-31 1 63 75
2 64 76
2000-08-31 1 65 77
2 66 78
2000-09-30 1 67 79
2 68 80
2000-10-31 1 69 81
2 70 82
2000-11-30 1 71 83
2 72 84
2000-12-31 1 73 85
2 74 86
2001-01-31 1 75 63
2 76 64
2001-02-28 1 77 65
2 78 66
2001-03-31 1 79 67
2 80 68
2001-04-30 1 81 69
2 82 70
2001-05-31 1 83 71
2 84 72
2001-06-30 1 85 73
2 86 74
2001-07-31 1 87 75
2 88 76
2001-08-31 1 89 77
2 90 78
2001-09-30 1 91 79
2 92 80
2001-10-31 1 93 81
2 94 82
2001-11-30 1 95 83
2 96 84
2001-12-31 1 97 85
2 98 86
这是我的临时解决方案:
f = np.tile(np.arange(1,25),2)
df['Y_avg'] = np.tile(df.groupby(f).mean().values.ravel(),2)
但我如何才能更有效地做到这一点?
谢谢你的帮助 所以你希望Y_平均值是X和T月的平均值,对吗?假设多重索引的T级别是DatetimeIndex,请使用
gb = df['Y'].groupby([df.index.get_level_values(0).month,
pd.Grouper(level=1)])
df['Y_avg'] = gb.transform('mean')
首先,我在粘贴数据时很难重新创建数据帧副本,所以 对于所有想回答此问题的人,可以使用以下代码重新创建示例:
import pandas as pd
# Create a date range, convert to list and duplicate
T = pd.date_range("2000-01-31", "2001-12-31", freq="M").tolist() * 2
# Create a list of repeated [1, 2] to match length of T
X = [1, 2] * (len(T) // 2)
Y = range(51, 99)
index = pd.MultiIndex.from_arrays([sorted(T), X], names=("T", "X"))
df = pd.DataFrame({"Y": Y}, index=index)
Y_avg = df.Y.mean(level="T")
df = df.join(Y_avg, on="T", rsuffix="_avg")
然后,要计算关于T级的Y平均值,可以使用以下代码:
import pandas as pd
# Create a date range, convert to list and duplicate
T = pd.date_range("2000-01-31", "2001-12-31", freq="M").tolist() * 2
# Create a list of repeated [1, 2] to match length of T
X = [1, 2] * (len(T) // 2)
Y = range(51, 99)
index = pd.MultiIndex.from_arrays([sorted(T), X], names=("T", "X"))
df = pd.DataFrame({"Y": Y}, index=index)
Y_avg = df.Y.mean(level="T")
df = df.join(Y_avg, on="T", rsuffix="_avg")
首先,您可以使用的level参数计算特定指数的平均值。您可以执行标准,将Y_avg系列与“T”索引上的数据帧合并。请注意,您必须提供一个后缀(在本例中为rsuffix)来正确处理列的名称。为什么选择向下投票?答案很好,除非我误解了问题。@jaime ac你能标记为已回答,或者给我一个投票吗?