[英]Creating new mean coloumns for multliple files using loop using python
我有這個看起來像這樣的數據框
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 個包含值的列。 到目前為止,我只能制作 1 個參數欄,並且當我想為另一個欄創建參數時迷路了。 代碼如下
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
s(通過method='pad'
默認參數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.