我有一个类似这样的数据框,
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']
df['ratio_D'] = df['cat_D']/df['dog_D']
当列长度变得非常大时,复制和粘贴会产生很多冗长的代码。 我是否需要创建 2 个列表,例如,
l1 = [cat_A, cat_B, cat_C, cat_D], l2= [dog_A, dog_B, dog_C, dog_D]
然后用for循环来实现?
最佳答案
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
关于python - 使用python pandas按名称计算多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56741769/