Python 在pandas中使用for循环创建新列

Python 在pandas中使用for循环创建新列,python,pandas,Python,Pandas,我不熟悉python,因此也不熟悉数据帧。假设我有以下数据集: d = {'a': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'b': [4, 4, 4, 5, 5, 5, 6, 6, 6]} ...: df = pd.DataFrame(data=d) ...: df ...: Out[20]: a b 0 1 4 1 1 4 2 1 4 3 2 5 4 2 5 5 2 5 6 3 6 7 3 6 8 3 6

我不熟悉python,因此也不熟悉数据帧。假设我有以下数据集:

d = {'a': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'b': [4, 4, 4, 5, 5, 5, 6, 6, 6]}
   ...: df = pd.DataFrame(data=d)
   ...: df
   ...: 
Out[20]: 
   a  b
0  1  4
1  1  4
2  1  4
3  2  5
4  2  5
5  2  5
6  3  6
7  3  6
8  3  6

我想做的是根据a列和b列中的信息创建新的列,比如b_1、b_2、b_3。最终数据应如下所示:

Out[21]: 
   a  b  b_1  b_2  b_3
0  1  4    4    0    0
1  1  4    4    0    0
2  1  4    4    0    0
3  2  5    0    5    0
4  2  5    0    5    0
5  2  5    0    5    0
6  3  6    0    0    6
7  3  6    0    0    6
8  3  6    0    0    6
在Stata中,这是通过以下命令实现的:

forvalues i=1(1)3{
gen b_`i'=b if a==`i'
replace b_`i'=0 if b_`i'==.
}
在python中有类似的方法吗?提前感谢

与和一起使用:

df.join(pd.DataFrame({f'b_{i}):x['b']代表i,x在df.groupby('a')})中。fillna(0))
。。?
df = df.join(df.set_index('a', append=True)['b'].unstack(fill_value=0).add_prefix('b_'))
print (df)
   a  b  b_1  b_2  b_3
0  1  4    4    0    0
1  1  4    4    0    0
2  1  4    4    0    0
3  2  5    0    5    0
4  2  5    0    5    0
5  2  5    0    5    0
6  3  6    0    0    6
7  3  6    0    0    6
8  3  6    0    0    6