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)
有没有更快的方法可以做到这一点。我正在处理多个数据框,此操作之后需要将其连接起来。
答案 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)