[英]Pandas: Applying filter function on column which type is a list
所以我的問題是,我已經用列 ('Interval_range') 創建了 DF,它從其他兩列('Start_interval 和'End_interval')中壓縮值並創建第三個(Interval_range'),它的類型是一個列表。 現在,我想創建第四個 ('Absolute_frequency'),它計算外部列表 ('dataset') 中的所有值,這些值大於 'Interval_range' 列的第一個參數,小於 'Interval_range' 的第二個參數' 柱子。 我怎樣才能做到這一點? 我試圖使用 .apply() 然后 filter() 但最后我什么也沒得到。 這是我的所有代碼:
dataset= [8,30,30,50,86,94,102,110,169,170,176,236,240,241,242,255,262,276,279,282]
interval = (max(dataset)-min(dataset))/6
int1 = [round(min(dataset),2),round(min(dataset)+interval,2)]
int2= [round(int1[1],2),round(int1[1]+interval,2)]
int3 =[round(int2[1],2),round(int2[1]+interval,2)]
int4 =[round(int3[1],2),round(int3[1]+interval,2)]
int5 =[round(int4[1],2),round(int4[1]+interval,2)]
int6 =[round(int5[1],2),round(max(dataset),2)]
intervals = [int1,int2,int3,int4,int5,int6]
analiza = pd.DataFrame(intervals,index='A B C D E F'.split(),columns='Start_interval End_interval'.split())
analiza['Interval_range'] = list(zip(analiza['Start_interval'],analiza['End_interval']))
如果將dataset
轉換為numpy
數組,則可以遍歷'Interval_range'
列並使用apply()
和lambda
表達式檢查值是否在元組范圍內
dataset = [8, 30, 30, 50, 86, 94, 102, 110, 169, 170, 176, 236, 240, 241, 242, 255, 262, 276, 279, 282]
arr = np.array(dataset)
....
analiza['Absolute_frequency'] = analiza['Interval_range'].apply(lambda x: ((x[0] <= arr) & (arr <= x[1])).sum())
輸出
Start_interval End_interval Interval_range Absolute_frequency
A 8.00 53.67 (8.0, 53.67) 4
B 53.67 99.34 (53.67, 99.34) 2
C 99.34 145.01 (99.34, 145.01) 2
D 145.01 190.68 (145.01, 190.68) 3
E 190.68 236.35 (190.68, 236.35) 1
F 236.35 282.00 (236.35, 282.0) 8
這些代碼行創建了一個名為“Absolute_frequency”的新列,並按照您的說明計算頻率。
analiza["Absolute_frequency"] = [None for i in range(len(analiza.index))]
def calculate_abs_freq(row):
lower = row["Start_interval"]
upper = row["End_interval"]
counter = 0
for data in dataset:
if(data >= lower and data <= upper):
counter += 1
row["Absolute_frequency"] = counter
return row
analiza = analiza.apply(calculate_abs_freq, axis = 1)
analiza
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.