【问题标题】:How to use lambda functions with cross-index computation when iterating dataframes columns迭代数据帧列时如何使用具有交叉索引计算的 lambda 函数
【发布时间】:2021-09-02 13:25:08
【问题描述】:

我有一个 pandas 数据框 df,其中一个列名为 val,我对其应用了交叉索引计算:

import pandas as pd
sensor_data = {'Sensor': ['A', 'B', 'C', 'D', 'E'], 'val': [20, 2 , 2, 19, 18]}
df = pd.DataFrame(sensor_data)

# Cross index computation:
cross_index_computation_result = []
for i in range(1, len(df['val'])):
    cross_index_computation_result.append(df['val'][i-1] * df['val'][i])
print(cross_index_computation_result)
>> [40, 4, 38, 342]

尤其是对于MapFilterReducelambda 函数,它们比使用带有索引访问的简单for 循环要快得多, 有没有更有效的方法来对数据框列交互执行跨索引计算?

我知道这是错误的语法,但类似于: cross_index_computation_result = list(map(lambda x: x[i-1] * x[i], df['val']))

【问题讨论】:

    标签: python pandas dataframe lambda


    【解决方案1】:

    您可以在 Numpy 中计算值(可能有更有效的方法来执行此操作):-> 在下面的代码中,数据被重新整形,然后使用各种 Numpy 函数来计算产品

    reshaped = np.reshape(df.val.to_numpy(), (2,2))
    
    reshaped[0].prod(), np.diag(reshaped[::-1]).prod(), reshaped[1].prod()
    (40, 38, 342)
    

    【讨论】:

      【解决方案2】:

      在 python3 上试试这个:

      sensor_data = {'Sensor': ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D'], 'val': [20, 2 , 19, 18, 20, 2, 19, 18]}
      df = pd.DataFrame(sensor_data)
      
      def map_fn(data):
          idx, el = data
          return df['val'][idx] * el
      
      print(list(map(map_fn, list(enumerate(df['val'][1:])))))
      # [40, 38, 342, 360, 40, 38, 342]
      

      在 python2 中,您可以使用lambda,如下所示:

      print list(map(lambda (i, el): df['val'][i] * el, enumerate(df['val'][1:])))
      

      【讨论】:

      • 这仅适用于sonsor_data['val'] 不包含重复项,因为.tolist(x) 将始终返回第一个索引。
      • @raphael,我明白了,你是对的。我编辑答案。这是你的答案吗?
      【解决方案3】:

      shift 呢?

      print((df['val'] * df['val'].shift(-1)).dropna().astype(int).to_list())
      
      [40, 4, 38, 342]
      

      【讨论】:

        猜你喜欢
        • 2018-11-19
        • 2014-11-13
        • 2021-03-19
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 2019-01-05
        相关资源
        最近更新 更多