我有像这样的pandas datframe。
a1 a2 b1 b2
0 1 2 2 5
1 3 4 5 4
2 6 7 8 3
3 7 7 7 1
我想取a1和a2,b1和b2的意思,并用a和b替换它。结果应如下:
a b
0 1.5 3.5
1 3.5 4.5
2 6.5 5.5
3 7 4
答案 0 :(得分:5)
print (df.columns.str[0])
Index(['a', 'a', 'b', 'b'], dtype='object')
df = df.groupby([df.columns.str[0]], axis=1).mean()
print (df)
a b
0 1.5 3.5
1 3.5 4.5
2 6.5 5.5
3 7.0 4.0
正则表达式为Series
创建groupby
的另一个解决方案是extract
:
print (df.columns.str.extract("([a-zA-Z])", expand=False))
Index(['a', 'a', 'b', 'b'], dtype='object')
df = df.groupby([df.columns.str.extract("([a-zA-Z])", expand=False)], axis=1).mean()
print (df)
a b
0 1.5 3.5
1 3.5 4.5
2 6.5 5.5
3 7.0 4.0
答案 1 :(得分:2)
试试这个
import pandas as pd
df = pd.read_csv('pd_sample1.csv')
df['a'] = (df['a1']+df['a2'])/2
df['b'] = (df['b1']+df['b2'])/2
df = df.drop(['a1','a2','b1','b2'],axis=1)
print df