簡體   English   中英

如何將 interval[int64,right) 類型的列拆分為 Pandas 中的兩列

[英]How to split column of type interval[int64,right) onto two columns in Pandas

給定一個df如下

  time_interval  dvalue
0        (0, 5]       1
1       (5, 10]       2
2      (10, 15]       4
3      (15, 20]       5
4      (20, 25]       6
5      (25, 30]       7
6      (30, 35]       8

我想拆分time_interval列,其中interval[int64, right]類型如下

   dvalue   l   u
0       1   0   5
1       2   5  10
2       4  10  15
3       5  15  20
4       6  20  25
5       7  25  30
6       8  30  35

重現df的完整代碼如下

ls = range(0, 100, 5)
df=pd.DataFrame([1,2,4,5,6,7,8],columns=['dvalue'])
df.index = pd.IntervalIndex.from_breaks(ls[:len(df) + 1])
df.reset_index(inplace=True)
df.rename(columns={'index':'time_interval'},inplace=True)

您可以使用:

df[['l', 'u']] = [[x.left, x.right] for x in df['time_interval']]

output:

  time_interval  dvalue   l   u
0        (0, 5]       1   0   5
1       (5, 10]       2   5  10
2      (10, 15]       4  10  15
3      (15, 20]       5  15  20
4      (20, 25]       6  20  25
5      (25, 30]       7  25  30
6      (30, 35]       8  30  35

使用Interval.leftInterval.right

df['l'] = df['time_interval'].apply(lambda x: x.left)
df['u'] = df['time_interval'].apply(lambda x: x.right)

df['l'] = df['time_interval'].map(lambda x: x.left)
df['u'] = df['time_interval'].map(lambda x: x.right)

或者首先轉換為IntervalIndex

idx = pd.IntervalIndex(df['time_interval'])
df['l'] = idx.left
df['u'] = idx.right

idx = pd.IntervalIndex(df['time_interval'])
df = df.assign(l=idx.left, u=idx.right)

print (df)
  time_interval  dvalue   l   u
0        (0, 5]       1   0   5
1       (5, 10]       2   5  10
2      (10, 15]       4  10  15
3      (15, 20]       5  15  20
4      (20, 25]       6  20  25
5      (25, 30]       7  25  30
6      (30, 35]       8  30  35

暫無
暫無

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

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