2017-07-17 34 views
1

嗨,這很簡單,但我想知道是否有人知道如何打印兩列之間的差異。目前,我有這樣的:打印熊貓列之間的增量差異

end | begin 
    935 916 
    961 916 
    972 916 

我努力實現以下目標:

end | begin | diff 
    935 916  916,917,918,919,920...935 
    961 916  916,917,918...961 
    972 916  916,917,918...972 

有誰知道一個簡單的列的操作,可能會產生呢?目前的代碼,我是:

timestamp = [] 
for x in range(len(listdates)): 
    while start_date <= listdates[x]: 
     timestamp.append(str(start_date)+'|') 
     start_date+=1 
start_date = 916 

時間戳=「」。加入(時間戳)

但是這個代碼是相當乏味,不提供正確的輸出

回答

1

您可以使用applyaxis=1通過行過程,然後lambda函數與range

print (df) 
    end begin 
0 920 916 
1 961 916 
2 972 916 

df['diff'] = df.apply(lambda x: range(x['begin'], x['end'] + 1), axis=1) 
print (df) 
    end begin            diff 
0 920 916       (916, 917, 918, 919, 920) 
1 961 916 (916, 917, 918, 919, 920, 921, 922, 923, 924, ... 
2 972 916 (916, 917, 918, 919, 920, 921, 922, 923, 924, ... 

如果需要string小號是posssible轉換由range或更好地利用numpy.arange創建的每個int值,轉換爲str和列表,並使用join

df['diff'] = df.apply(lambda x: ','.join(np.arange(x['begin'], x['end']+ 1) 
              .astype(str).tolist()), axis=1) 
print (df) 
    end begin            diff 
0 920 916        916,917,918,919,920 
1 961 916 916,917,918,919,920,921,922,923,924,925,926,92... 
2 972 916 916,917,918,919,920,921,922,923,924,925,926,92... 
+1

引人入勝。感謝您的答覆!好奇的是,你爲什麼更喜歡使用numpy.arange? – codeninja

+1

因爲範圍創建整數列表,並且對於轉換爲str - 需要列表理解有點複雜。 – jezrael

+1

我明白了,謝謝! – codeninja