我有一个类似的数据框,
<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循环来实现吗?
答案 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