当前位置: 首页 > 知识库问答 >
问题:

如何通过dataframe解析,根据另外两列的值创建新列

劳鹏云
2023-03-14

我想根据列_1和列_2或列_3中的值创建一个新列“column_new”。如果列_1=='C',则列_new的值与列_2相同,但如果列_1=='G',则列_new的值与列_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

共有3个答案

堵龙野
2023-03-14

你可以试试:希望它会起作用

df['col_new']=df[(df['col2'][df['col1']=='C']) & (df['col3'][df['col1']=='G']) 
公冶才
2023-03-14

我想出来了:

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)
冯永长
2023-03-14

尝试np。选择

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

 类似资料:
  • 我有一个数据框如下所示 我想增加两列, 第一个名为“活动”的开关将值切换为1(如果为df.value 我尝试使用for循环,但当时间序列很长时,它会占用太多时间。有人知道更好的方法吗?谢谢你的进步!

  • 我有一个火花RDD(或Dataframe-转换成任何一个都不是问题),具有以下列(每个结构的示例): 我想扩展这个RDD/DF,以增加一个包含列表数组大小的列。所以输出应该是这样的(示例): 我试图做一个

  • 问题内容: 我有一个名为Vendor的表,在此表中有一个名为AccountTerms的列,该列仅显示一个值(即0、1、2、3),依此类推。我也有一个要使用()的列,以反映该值的含义,例如: 等等… 我需要的是一个脚本,它将查看AccountTerms中的值,然后将更新以显示上面显示的单词值。我该怎么做呢? 问题答案: 我将尝试以一种尽可能简单的方式来解释这一点,以便于理解: 假设您有一个这样的表设

  • 我有一个包含3列的数据表,我想使用列投影的值创建一个新列。 应该如何从投影中选择值?--它应该选择前一年投影的3个具体值--如果您要为2020年创建一个新列,它应该从2021年、2022年和2023年选择值 我已经尝试了以下SQL: spark.sql(''从表中选择serial_number,pit_pd_proj为proj1,year,lead(pit_pd_proj,3)over(parti

  • 在我的熊猫数据框架中,尝试创建一个名为loan\u status\u的列非常好。如果贷款状态为“当前”或“已全额支付”,则应包含整数1。否则,应包含整数0。 我使用https://resources.lendingclub.com/LoanStats_2018Q4.csv.zip作为我的数据集。 我的问题代码是: ()---- /usr/local/lib/python3.6/dist-packa

  • 我有一张800万行的大桌子。此表有15列带有数值,但这些值只能是0,并且只能是该列特有的另一个数值。我想根据特定值为这些列中的每一列创建两个新列。这些新值总是特定于列。 这是我的数据外观的虚拟示例: 这是我想要的输出 对应关系始终相同,即中1的值为,中2的值为,中3的值为。 我知道我可以用这样的东西 但我的真实数据有15列,需要大量的复制粘贴,有没有干净的方法?