我有以下数据框(假设我有更多列):
m a b
t1 1 1 2
t2 2 1 2
t3 3 1 2
我希望将列m
与元素a
和b
逐个元素相乘,并返回以下数据框:
a b
t1 1 2
t2 2 4
t3 3 6
目前我首先将列m
转换为向量。只是想知道是否有人有更直接的方式?
答案 0 :(得分:0)
我认为你需要mul
:
如果a
只需要多个b
和m
列:
print (df[['a','b']].mul(df.m, axis=0))
a b
t1 1 2
t2 2 4
t3 3 6
如果列m
是第一个,您可以选择所有列,而不是先iloc
,然后选择多个:
print (df.iloc[:, 1:])
a b
t1 1 2
t2 1 2
t3 1 2
df = df.iloc[:, 1:].mul(df.m, axis=0)
print (df)
a b
t1 1 2
t2 2 4
t3 3 6
更一般地说,列表理解不是m
的过滤列:
cols = [col for col in df.columns if col !='m']
print (cols)
['a', 'b']
df = df[cols].mul(df.m, axis=0)
print (df)
a b
t1 1 2
t2 2 4
t3 3 6
<强>计时强>:
#[300000 rows x 2 columns]
df = pd.concat([df]*100000).reset_index(drop=True)
In [438]: %timeit (df[['a','b']].mul(df.m, axis=0))
100 loops, best of 3: 5.41 ms per loop
In [439]: %timeit (df.iloc[:, 1:].mul(df.m, axis=0))
100 loops, best of 3: 2.66 ms per loop
In [440]: %timeit (df[['a','b']].apply(lambda x: x*df.m))
100 loops, best of 3: 10.3 ms per loop