我有一个如下所示的数据框:
N | 地点 | 数量 | C | H | E | G | D |
---|---|---|---|---|---|---|---|
1 | 安格斯 | 25 | 33 | 45 | 23 | 60 | 43 |
2 | 阿吉尔 | 43 | 23 | 12 | 56 | 19 | 45 |
3 | 艾尔什 | 14 | 46 | 27 | 92 | 14 | 12 |
我想创建一个迭代“C”、“H”、“E”、“G”、“D”的函数,并创建一个新的数据帧,其中行值替换为平均值,例如:meanC = 33/25,平均值H = 45/25,平均值E = 23/25。
我不太确定该怎么做。 任何帮助将不胜感激,谢谢!
在选定的列上使用
df.div
,传递 df['Number']
和 axis=0
(按行)并链 df.add_prefix
。
df[cols].div(df['Number'], axis=0).add_prefix('mean')
meanC meanH meanE meanG meanD
0 1.320000 1.800000 0.920000 2.40000 1.720000
1 0.534884 0.279070 1.302326 0.44186 1.046512
2 3.285714 1.928571 6.571429 1.00000 0.857143
df.join
将其添加到原始 df
的(部分?):out = (df[df.columns.difference(cols)]
.join(
df[cols].div(df['Number'], axis=0).add_prefix('mean')
)
)
输出
N Number Place meanC meanH meanE meanG meanD
0 1 25 Angus 1.320000 1.800000 0.920000 2.40000 1.720000
1 2 43 Argyl 0.534884 0.279070 1.302326 0.44186 1.046512
2 3 14 Ayrsh 3.285714 1.928571 6.571429 1.00000 0.857143
如果你想要一个new DataFrame,你可以使用:
cols = ['C', 'H', 'E', 'G', 'D']
out = (df[cols].div(df['Number'], axis=0)
.combine_first(df).reindex_like(df)
)
要修改输入:
cols = ['C', 'H', 'E', 'G', 'D']
df[cols] = df[cols].div(df['Number'], axis=0)