为某些列pandas

时间:2018-05-27 22:06:19

标签: python pandas dataframe

我正在从更大的数据帧创建小型数据帧。从较大的我抓取包含某个字符串的列可以说' aa'。现在在较小的df中,我想为每个dv创建一个新列。所以对于每个人来说都是如此。 col,我想添加' _goal'所以aa2,aa7,创建aa2_goal,aa7_goal进行评分,并且它必须是非特定的,因为这可以适用于许多不同列名的较小df,但它们都包含某个' str&#39 ;

之前 -

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  

之后

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   

- 我的尝试

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

- 接下来的步骤是将值从不同的df导入这些_goal列 - 谢谢

2 个答案:

答案 0 :(得分:2)

您可以通过过滤必要的列,然后使用for加入空数据帧来避免显式pd.DataFrame.join循环:

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创建新列的原因。

如果尚未在其他地方回答,则应单独询问您的后续问题。

答案 1 :(得分: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']

这样的事情。