为某些列创建新列 Pandas

3
我将从一个大的数据框中创建小的数据框。我从这个大的数据框中获取包含特定字符串(例如'aa')的列。现在,我想为每个 'aa' 列在小的数据框中创建一个新列。因此,对于每个 'aa' 列,我想要添加 '_goal',如 aa2,aa7,则为得分创建 aa2_goal,aa7_goal。这必须是非特定的,因为它可能适用于许多具有不同列名称但都包含某个 'str' 的较小数据框。

转换前的数据框:--

name    area    aa2 ab1 aa7 ac3 time    type  
CAN 11  0.5 1.2 0.4 2.1 7:21    H  
SPA 22  0.4 1.4 0.5 2.5 6:45    M  
USP 21  0.7 1.1 0.6 2.5 3:14    G  
COM 13  0.1 1.9 0.2 2.2 8:22    D  
MAP 16  0.3 1.8 0.1 2.4 3:11    S  

之后的df

name    area    aa2 ab1 aa7 ac3 time    type    aa2_new aa7_new  
CAN 11  0.5 1.2 0.4 2.1 7:21    H           
SPA 22  0.4 1.4 0.5 2.5 6:45    M           
USP 21  0.7 1.1 0.6 2.5 3:14    G         
COM 13  0.1 1.9 0.2 2.2 8:22    D         
MAP 16  0.3 1.8 0.1 2.4 3:11    S   

--my attempt

for col in df:
    if 'aa' in df.columns:
        df[col+'_new']
print df

--接下来的步骤是从另一个数据框导入一个值到这些_goal列中--谢谢
2个回答

2

您可以通过筛选必要的列,然后使用pd.DataFrame.join连接一个空数据框来避免显式的for循环:

new_cols = df.columns[df.columns.str.startswith('aa')] + '_new'
df = df.join(pd.DataFrame(columns=new_cols))

print(df)

  name  area  aa2  ab1  aa7  ac3  time type aa2_new aa7_new
0  CAN    11  0.5  1.2  0.4  2.1  7:21    H     NaN     NaN
1  SPA    22  0.4  1.4  0.5  2.5  6:45    M     NaN     NaN
2  USP    21  0.7  1.1  0.6  2.5  3:14    G     NaN     NaN
3  COM    13  0.1  1.9  0.2  2.2  8:22    D     NaN     NaN
4  MAP    16  0.3  1.8  0.1  2.4  3:11    S     NaN     NaN

你的代码问题在于你没有给你的系列赋值,这就是告诉pandas创建一个新列的内容。
如果你的后续问题还没有在其他地方得到解答,那么请单独提出。

0

如果要根据是否包含子字符串'aa'来创建列,可以这样做:

for col in df.columns: # iterate over columns' names
    if 'aa' in col:
        df[col+'_goal'] = None # fill the column with None
        # or df[col+'_goal'] = '' if you want empty string in the column you create

关于你所谓的下一步,这个问题太宽泛了,很难给出一个明确的答案。你可以尝试像这样做:df['aa2_goal'] = another_df['another_col']


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接