我有这个看起来像这样的数据框
df = pd.DataFrame({'A':[230,345,222],'':[235,375,292],'B':[210,385,260],' ':[235,378,292],'C':[255,379,333],'D':[555,321,121],'E':[999,123,333],' ':[1231,1231,222]})
A B C D E
0 230 235 210 235 255 555 999 1231
1 345 375 385 378 379 321 123 1231
2 222 292 260 292 333 121 333 222
我想为每个参数添加均值列,因为像A,B和E这样的参数有2个具有值的列。到目前为止,我只可以创建一个参数列,而当我想为另一个列创建参数时迷路了。代码如下
dflist=pd.DataFrame()
for i, file in enumerate(flist):
df = pd.read_csv(file, skiprows = [0,1,3,4])
data = df.iloc[:,1:2]
dflist['A%i'%i] = data.mean(axis=1)
我希望结果像这样。
A Aavg B Bavg C D E Eavg
0 230 235 123 210 235 123 255 555 999 1231 111
1 345 375 456 385 378 324 379 321 123 1231 222
2 222 292 333 260 292 1231 333 121 333 222 333
任何帮助将不胜感激
您没有正确索引列。正确的索引应如下所示:
df = pd.DataFrame({
('A', 1):[230,345,222],
('A', 2):[235,375,292],
('B', 1):[210,385,260],
('B', 2):[235,378,292],
('C', 1):[255,379,333],
('D', 1):[555,321,121],
('E', 1):[999,123,333],
('E', 2):[1231,1231,222]
})
A B C D E
1 2 1 2 1 1 1 2
0 230 235 210 235 255 555 999 1231
1 345 375 385 378 379 321 123 1231
2 222 292 260 292 333 121 333 222
然后您可以很容易地按列进行平均:
df.mean(level=0, axis=1)
A B C D E
0 232.5 222.5 255.0 555.0 1115.0
1 360.0 381.5 379.0 321.0 677.0
2 257.0 276.0 333.0 121.0 277.5
如果您无法控制数据格式,则可以将每个以空白命名的列视为上一列的延续:
col_group = df.columns.to_series() \
.str.strip() \
.replace('')
df.groupby(col_group, axis=1).mean()
replace
函数看似简单,但实际上它同时在做两件事:(1)用None
替换空白列名; (2)用最后一个非空列名填充这些None
(通过method='pad'
默认参数)。