【问题标题】:How to divide columns by other columns in pandas in a fast way?如何快速将熊猫中的列除以其他列?
【发布时间】:2021-08-12 05:22:24
【问题描述】:

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

【问题讨论】:

    标签: python pandas dataframe divide


    【解决方案1】:

    你可以这样做:

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

    【讨论】:

    • 你的代码第三行有错误,'num'和'denom'不是df的列
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 2022-11-02
      • 2020-07-12
      • 1970-01-01
      • 2023-02-17
      相关资源
      最近更新 更多