熊猫DataFrame按数组乘法

时间:2018-08-22 13:11:46

标签: python pandas dataframe multiplication

DataFrame

A B C
1 2 3
2 4 6

array = [1,10,100]

结果:

A   B   C
1   2   3
2   4   6
10  20  30
20  40  60
100 200 300
200 400 600

数组和数据帧的长度可以是任意大小,不一定相同。

我已经使用了FOR循环,如果我有大数据帧或太多数据帧,这会太慢。

下面是我的示例代码段:

for i in array:
    pr[pr.select_dtypes(include=['number']).columns] *= i
    fdf = np.concat([fdf,pr],axis=0)

有没有更快的方法可以做到这一点。我正在处理多个数据框,此操作之后需要将其连接起来。

4 个答案:

答案 0 :(得分:2)

mult = df.values * np.array([1,10,100])[:, np.newaxis, np.newaxis]
pd.DataFrame(mult.reshape((-1, 3)), columns=df.columns)

     A    B    C
0    1    2    3
1    2    4    6
2   10   20   30
3   20   40   60
4  100  200  300
5  200  400  600

答案 1 :(得分:1)

使用pandas.concat

pd.concat([df * n for n in a], ignore_index=True)

     A    B    C
0    1    2    3
1    2    4    6
2   10   20   30
3   20   40   60
4  100  200  300
5  200  400  600

设置

io_ = pd.io.common.StringIO

def rpd(text='', sep='\s{1,}', *args, **kwargs):
  kw = dict(engine='python', sep=sep)
  return pd.read_csv(io_(text), *args, **kw, **kwargs)

df = rpd("""\
A B C
1 2 3
2 4 6""")

a = np.array([1, 10, 100])

答案 2 :(得分:1)

IIUC

pd.DataFrame(np.vstack([df.values*x for x in ary]))
Out[171]: 
     0    1    2
0    1    2    3
1    2    4    6
2   10   20   30
3   20   40   60
4  100  200  300
5  200  400  600

熊猫reindex

df.reindex(df.index.tolist()*(len(ary))).reset_index(drop=True).mul(pd.Series(np.repeat(ary,len(df))),0)
Out[201]: 
     A    B    C
0    1    2    3
1    2    4    6
2   10   20   30
3   20   40   60
4  100  200  300
5  200  400  600

答案 3 :(得分:0)

df = pd.DataFrame({'A':[1,2],'B':[2,4],'C':[3,6]})
ar = [1,10,100]

result = pd.concat([df * i for i in ar], ignore_index = True)