[英]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.