如何用Pandas中的其他列快速划分列?

2024-10-05 14:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在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']


Tags: 数据框架pandasdf方式otmedia中将
2条回答

一个^{}选项:

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

你可以这样做:

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

相关问题 更多 >