【发布时间】:2019-09-13 19:52:11
【问题描述】:
我的数据框如下所示
df =
index element data1 data2 data3
0 M1 10 20 30
1 M1 40 50 60
2 M2 70 80 90
3 M2 100 120 130
4 M3 140 150 160
5 M3 170 180 190
6 M4 200 210 230
element_list1 = ['M1','M4',...........,'M25']
element_list2 = ['M2','M5',...........,'M26']
element_list3 = ['M3','M6',...........,'M27']
现在我想创建一个新列。新列中的值基于元素的名称。如果元素属于list1然后选择data2,list2然后data2等。最后我想实现如下所示
df =
index element data1 data2 data3 final
0 M1 10 20 30 10
1 M1 40 50 60 40
2 M2 70 80 90 80
3 M2 100 120 130 120
4 M3 140 150 160 160
5 M3 170 180 190 190
6 M4 200 210 230 200
我现在的代码如下:
df['final'] = np.nan
for a in element_list1:
for i,j in enumerate(df['element']):
if j==a:
df['final'].iloc[i] = df['data1'].iloc[i]
for a in element_list2:
for i,j in enumerate(df['element']):
if j==a:
df['final'].iloc[i] = df['data2'].iloc[i]
for a in element_list3:
for i,j in enumerate(df['element']):
if j==a:
df['final'].iloc[i] = df['data3'].iloc[i]
有没有比上面更简单的方法?
【问题讨论】:
-
能否详细说明如何使用这个新功能?
-
@jpp 我是 Python 新手。您能否帮助构建标准
criteria = [df['element'].in(element_list1), df['element'].in(element_list2), df['element'].in(element_list3)] \n values = [df['data1'], df['data2'], df['data3']] \n df['final'] = np.select(criteria, values, 0)这是正确的吗? -
@jpp 我是 Python 新手。您能否帮助构建标准 criteria = [df['element'].in(element_list1), df['element'].in(element_list2), df['element'].in(element_list3)] \n values = [df['data1'], df['data2'], df['data3']] \n df['final'] = np.select(criteria, values, 0) 这样对吗?
-
使用
isin而不是in,见pd.Series.isin,否则看起来没问题