簡體   English   中英

獲取2個熊貓列的范圍列表

[英]Getting a list of the range of 2 pandas columns

我有以下DataFrame(重新格式化了一下):

    f_name  l_name      n   f_bought  l_bought
0   Abraham Livingston  24  1164      1187
1   John    Brown       4   1188      1191
2   Samuel  Barret      16  1192      1207
3   Nathan  Blodget     4   1208      1212
4   Bobby   Abraham     1   1212      1212

我想創建一個列, bought ,這是一個列表range(df[f_bought], df[l_bought])

我試過了:

def getRange(l1,l2):
    r = list(range(l1, l2))
df.apply(lambda index: getRange(df['f_bond'], df['l_bond']),axis=1)

但它導致TypeError:

"cannot convert the series to <type 'int'>", u'occurred at index 0'

我已經嘗試過df.info(),並且兩列的類型都是int64。

我想知道是否應該使用類似df.loc[]或類似的東西? 還是完全其他?

您應該能夠使用apply來執行此操作, apply將功能應用於數據幀的每一行或每一列。

def bought_range(row):
    return range(row.f_bought, row.l_bought)

df['bought_range'] = df.apply(bought_range, axis=1)

結果是:

f_name      l_name   n  f_bought  l_bought  \
0  Abraham  Livingston  24      1164      1187   
1     John       Brown   4      1188      1191   
2   Samuel      Barret  16      1192      1207   
3   Nathan     Blodget   4      1208      1212   
4    Bobby     Abraham   1      1212      1212   

                                        bought_range  
0  [1164, 1165, 1166, 1167, 1168, 1169, 1170, 117...  
1                                 [1188, 1189, 1190]  
2  [1192, 1193, 1194, 1195, 1196, 1197, 1198, 119...  
3                           [1208, 1209, 1210, 1211]  
4                                                 []

一個警告是Python的range不包括上限:

In [1]: range(3, 6)
Out[1]: [3, 4, 5]

這並不難處理( return range(row.f_bought, row.l_bought + 1) ),但確實需要考慮在內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM