如何通过dataframe进行解析,根据另外两列的值生成新的列

2024-03-28 22:06:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据第1列和第2列或第3列的值创建一个新列“column\u new”。如果第1列=='C',则第2列的值与第2列的值相同,但如果第1列=='G',则第3列的值与第3列的值相同

我试过:

def new_value(x):
   if df1['column_1'] == 'C' :
      return df1['column_2']
   if df1['column_1'] == 'G':
      return df1['column_3']
   else:
       return 'Other'

df1['column_new'] = df1['column_1'].apply(new_value)

错误:值错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()

也尝试过:

for row in df1:
    if df1.loc[df1['column_1'] == 'C']:
        df1['column_new'] = df1['column_2']
    elif df1.loc[df1['column_1'] == 'G']:
        df1['column_new'] = df1['column_3']

错误:值错误:数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()

一些数据:

column_1    column_2    column_3
C   AAAACCCACCT ACCCA
C   GTGGGCTAAAA GGCTA
G   ATGGGCTTTTT GGCTT
G   AGAAAGCCCGC AAGCC

Tags: 数据newreturnifvalue错误anycolumn
3条回答

我想出来了:

def new_value(column_1,column_2, column_3):
    if column_1 == 'C':
        return column_2[:]
    elif column_1 == 'G':
        return column_3[:]
    else:
        return 'NaN'

df1['column_new'] = df1.apply(lambda row: new_value(row.column_1, row.column_2, row.column_3), axis = 1)

试试np.select

cond_1 = df['column_1'] == 'C'
cond_2 = df['column_1'] == 'G'
df['column_new'] = np.select([cond_1, cond_2], [df.column_2, df.column_3], 'Other')

Out[1715]:
  column_1     column_2 column_3   column_new
0        C  AAAACCCACCT    ACCCA  AAAACCCACCT
1        C  GTGGGCTAAAA    GGCTA  GTGGGCTAAAA
2        G  ATGGGCTTTTT    GGCTT        GGCTT
3        G  AGAAAGCCCGC    AAGCC        AAGCC

您可以尝试: 希望能成功

df['col_new']=df[(df['col2'][df['col1']=='C']) & (df['col3'][df['col1']=='G']) 

相关问题 更多 >