使用python pandas按名称计算多列

时间:2019-06-24 18:02:22

标签: python pandas numpy dataframe

我有一个类似的数据框,

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Enter Search Word: <input type="text">
<br />
<br />
<button type="button">Afghanistan</button>
<button type="button">Antarctica</button>
<button type="button">Mali</button>
<button type="button">Canada</button>
<button type="button">US</button>
<button type="button">France</button>
<button type="button">Chile</button>
<button type="button">Peru</button>

我知道如何通过使用列名(例如

)在列之间进行计算

cat_A cat_B cat_C cat_D dog_A dog_B dog_C dog_D 3 2 4 1 9 8 10 6 ... ...

df['ratio_A'] = df['cat_A']/df['dog_A']

但是当我尝试通过计算每个列来生成多个列时,还有其他更简便的方法来计算所有列并一次附加新列吗?代替

cat_A cat_B cat_C cat_D dog_A dog_B dog_C dog_D ratio_A 3 2 4 1 9 8 10 6 3/9

df['ratio_B'] = df['cat_B']/df['dog_B']

df['ratio_C'] = df['cat_C']/df['dog_C']

当列长变得很大时,将要复制和粘贴很多冗长的代码。 我是否需要创建2个类似的列表,

df['ratio_D'] = df['cat_D']/df['dog_D']

然后使用for循环来实现吗?

1 个答案:

答案 0 :(得分:5)

IMO在这里的一个好习惯是使用MultiIndex es而不是平列:

df.columns = pd.MultiIndex.from_tuples(map(tuple, df.columns.str.split('_')))
df
  cat          dog          
    A  B  C  D   A  B   C  D
0   3  2  4  1   9  8  10  6

此时,计算比率是非常简单的礼貌的索引对齐方式。

df['cat'] / df['dog']
          A     B    C         D
0  0.333333  0.25  0.4  0.166667

res =  df['cat'] / df['dog']
res.columns = pd.MultiIndex.from_product([['ratio'], res.columns])

pd.concat([df, res], axis=1)
  cat          dog               ratio                     
    A  B  C  D   A  B   C  D         A     B    C         D
0   3  2  4  1   9  8  10  6  0.333333  0.25  0.4  0.166667