Python Dataframe如何基于条件创建新列值

Python Dataframe如何基于条件创建新列值,python,pandas,dataframe,Python,Pandas,Dataframe,下面给出了我的数据帧 df= 现在我想创建一个新列。新列中的值基于元素的名称。若元素属于list1,那个么选择data2,list2,然后选择data2,等等。最后,我想实现如下的功能 df= 我目前的代码如下: df['final'] = np.nan for a in element_list1: for i,j in enumerate(df['element']): if j==a: df['final'].iloc[i] = df['d

下面给出了我的数据帧

df=

现在我想创建一个新列。新列中的值基于元素的名称。若元素属于list1,那个么选择data2,list2,然后选择data2,等等。最后,我想实现如下的功能

df=

我目前的代码如下:

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]
有没有比上面更简单的方法

解决方案 制作元素列表 e1=np.arange1,26,3 e2=e1+1 e3=e1+2 元素_list1=[e1.tolist中x的f'M{x}] 元素_list2=[e2.tolist中x的f'M{x}] 元素_list3=[e3.tolist中x的f'M{x}] 元素列表=[元素列表1,元素列表2,元素列表3] 从数据帧中删除列“index” df=df.dropcolumns='index' “最终”列的流程数据 final=pd.concat[df.data1[df.element.IsineElement\u列表[0]], df.data2[df.element.IsineElement_列表[1]], df.data3[df.element.IsineElement_列表[2]],] df['final']=final df 输出 制作数据
试用,演示:。您能详细介绍一下如何使用这个新函数吗?@jpp我对Python不熟悉。你能帮我构造条件criteria=[df['element'].inelement_list1,df['element'].inelement_list2,df['element'].inelement_list3]\n values=[df['data1'],df['data2'],df['data3']\n df['final']=np.selectcriteria,values,0是否正确?@jpp我是Python新手。您是否可以帮助构造条件criteria=[df['element'].inelement_list1,df['element'].inelement_list2,df['element'].inelement_list3]\n values=[df['data1'],df['data2'],df['data3']\n df['final']=np.selectcriteria,values,0是否正确?请使用isin not in,请参阅,否则看起来正常
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]
import sys
if sys.version_info[0] < 3: 
    from StringIO import StringIO
else:
    from io import StringIO

import pandas as pd

df_string = """
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
"""

df = pd.read_csv(StringIO(df_string), sep="\s+")