根据pandas dataframe中的其他列创建新列

时间:2014-08-15 02:13:34

标签: pandas

基于另外两列创建一组新列的最佳方法是什么? (类似于交叉表或SQL案例陈述)

这很有用,但在大型数据帧上性能非常慢:

for label in labels:
   df[label + '_amt'] = df.apply(lambda row: row['amount'] if row['product'] == label else 0, axis=1)

1 个答案:

答案 0 :(得分:0)

您可以使用pivot_table

>>> df
   amount product
0       6       b
1       3       c
2       3       a
3       7       a
4       7       a
>>> df.pivot_table(index=df.index, values='amount', 
...                columns='product', fill_value=0)
product  a  b  c
0        0  6  0
1        0  0  3
2        3  0  0
3        7  0  0
4        7  0  0

,或者

>>> for label in df['product'].unique():
...     df[label + '_amt'] = (df['product'] == label) * df['amount']
... 
>>> df
   amount product  b_amt  c_amt  a_amt
0       6       b      6      0      0
1       3       c      0      3      0
2       3       a      0      0      3
3       7       a      0      0      7
4       7       a      0      0      7