First you can find unique
values ββfrom the first char columns with str :
print df.columns.str[0].unique() ['a' 'b' 'c']
Or the first substring, if the columns are splited
_
(better for real data).
print df.columns.str.split('_').str[0].unique() ['a' 'b' 'c'] for x in df.columns.str[0].unique(): df[x + '_ratio'] = df[x + '_us']/df[x + '_ww']
Comparison
import pandas as pd import numpy as np np.random.seed(0) values = ['a_us', 'b_us', 'c_us', 'a_ww','b_ww','c_ww'] df = pd.DataFrame(np.random.rand(1, 6), columns=values[:6]) df['a_ratio'] = df['a_us']/df['a_ww'] df['b_ratio'] = df['b_us']/df['b_ww'] df['c_ratio'] = df['c_us']/df['c_ww'] print df a_us b_us c_us a_ww b_ww c_ww a_ratio \ 0 0.548814 0.715189 0.602763 0.544883 0.423655 0.645894 1.007213 b_ratio c_ratio 0 1.688142 0.933223
matches with:
import pandas as pd import numpy as np np.random.seed(0) values = ['a_us', 'b_us', 'c_us', 'a_ww','b_ww','c_ww'] df = pd.DataFrame(np.random.rand(1, 6), columns=values[:6]) for x in df.columns.str[0].unique(): df[x + '_ratio'] = df[x+'_us']/df[x+'_ww'] print df a_us b_us c_us a_ww b_ww c_ww a_ratio \ 0 0.548814 0.715189 0.602763 0.544883 0.423655 0.645894 1.007213 b_ratio c_ratio 0 1.688142 0.933223
source share