如何快速将 pandas 中的列除以其他列?

How to divide columns by other columns in pandas in a fast way?

我想在 pandas 的大数据框中将列除以其他列。如何简单快捷地完成此操作?

这是一个例子:

sent1 sent2 sent3 media fake other 
0.67  0.25  1.6   3.0    4.0  5.0

我的输出是

sent1 sent2 media fake other sent1/media sent1/fake  sent1/other sent2/media sent2/fake sent2/ot
0.67  0.25   3.0   4.0  5.0  0.22.        0.16.       0.134       0.08         0.625       0.05

我想以最简单的方式获得这个结果。

到目前为止,我是这样计算的:

df['sent1/media'] = df['sent1'] / df['media']
df['sent1/fake'] = df['sent1'] / df['fake']
df['sent1/other'] = df['sent1'] / df['other']

你可以这样做:

for num in ['sent1', 'sent2']:
    for denom in ['media', 'fake', 'other']:
        df[f'{num}/{denom}'] = df[num] / df[denom]

一个broadcasting选项:

from itertools import product

import pandas as pd

df = pd.DataFrame({
    'sent1': {0: 0.67}, 'sent2': {0: 0.25},
    'sent3': {0: 1.6}, 'media': {0: 3.0},
    'fake': {0: 4.0}, 'other': {0: 5.0}
})

# Grab sent1 and sent2 Columns
sents = df[['sent1', 'sent2']]
# Grab Non Sent Columns
others = df.filter(regex='^(?!sent)')
# Broadcast Division
results = (
        sents.to_numpy()[..., None] / others.to_numpy()[:, None]
).reshape((len(df), len(sents.columns) * len(others.columns)))

# Convert to new dataframe with new column labels
new_df = pd.DataFrame(
    results,
    columns=map('/'.join,
                (product(sents.columns.tolist(), others.columns.tolist())))
)

# Join to df
new_df = df.join(new_df)

print(new_df.to_string())
   sent1  sent2  sent3  media  fake  other  sent1/media  sent1/fake  sent1/other  sent2/media  sent2/fake  sent2/other
0   0.67   0.25    1.6    3.0   4.0    5.0     0.223333      0.1675        0.134     0.083333      0.0625         0.05