Python Dataframe如何基于条件创建新列值
下面给出了我的数据帧 df= 现在我想创建一个新列。新列中的值基于元素的名称。若元素属于list1,那个么选择data2,list2,然后选择data2,等等。最后,我想实现如下的功能 df= 我目前的代码如下: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['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+")