【问题标题】:calculating a range based on the fields of a pandas dataframe根据熊猫数据框的字段计算范围
【发布时间】:2020-07-02 20:11:07
【问题描述】:

我有一个熊猫数据框

import pandas as pd
import numpy as np 

d = pd.DataFrame({
       'col': ['A', 'B', 'C', 'D'],
       'start': [1, 4, 6, 8], 
       'end': [4, 9, 10, 12]
    })

我正在尝试根据开始和结束字段计算范围字段,以便它的值是

[1, 2, 3, 4]
[4, 5, 6, 7, 8, 9]
[6, 7, 8, 9, 10]
[8, 9, 10, 11, 12]

我尝试了以下选项

d['range_'] = np.arange( d.start, d.end, 1)


d['range_'] = range(d['start'], d['end']) 

但出现以下错误

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

TypeError: 'Series' 对象不能被解释为整数

任何帮助将不胜感激

谢谢

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    试试这个:

    d.apply(lambda x: np.arange(x['start'], x['end']+1), axis=1)
    

    输出:

    0          [1, 2, 3, 4]
    1    [4, 5, 6, 7, 8, 9]
    2      [6, 7, 8, 9, 10]
    3    [8, 9, 10, 11, 12]
    dtype: object
    

    注意: np.arangerange 并非设计为接受 pd.Series,因此您可以使用 apply rowwise 来创建范围。

    【讨论】:

      【解决方案2】:

      IIUC

      l = [list(range(x,y+1)) for x , y in zip(d.start,d.end)]
      [[1, 2, 3, 4], [4, 5, 6, 7, 8, 9], [6, 7, 8, 9, 10], [8, 9, 10, 11, 12]]
      d['range_']=l
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-11
        • 2015-12-28
        • 2015-01-28
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        相关资源
        最近更新 更多