我正在从更大的数据帧创建小型数据帧。从较大的我抓取包含某个字符串的列可以说' 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列 - 谢谢
答案 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']