【发布时间】:2021-12-12 08:57:33
【问题描述】:
如果这不是一个好问题,请提前道歉,我是 DataFrames 的初学者...
我有一个大型数据框(大约有数千行和 5000 多列)。
前 5000 列包含数字,我需要根据其他列的值对这些数字中的每一个进行一些操作。
例如,将一行中的前 5000 个数字与同一行中另一列的值相乘。
| Index | 1 | 2 | 3 | 4 | ... | 5000 | a | b | c | d |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.1 | 0.4 | 0.8 | 0.6 | ... | 0.3 | 3 | 7 | 2 | 9 |
| 1 | 0.7 | 0.5 | 0.4 | 0.8 | ... | 0.1 | 4 | 6 | 1 | 3 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1000 | 0.2 | 0.5 | 0.1 | 0.9 | ... | 0.6 | 6 | 8 | 5 | 4 |
这是一个代码示例,它将我的数字乘以列“a”,然后乘以一个常数,然后得到它的指数:
a_col = df.get_loc("a")
df.iloc[: , : 5000 ] = np.exp (df.iloc[: , : 5000 ] * df.iloc[: , [a_col]].to_numpy() * np.sqrt(4) )
虽然结果看起来不错,但确实感觉很慢,尤其是与我尝试替换的代码相比,即在循环中逐行执行这些操作。
这是完成我想要实现的目标的正确方法,还是我做错了什么?
感谢您的帮助!
【问题讨论】:
-
您的代码对我不起作用。
get_col是什么? -
你的意思是 get_loc 吗?是获取“a”的列号。
-
是的对不起,我的意思是
get_col。我有一个名为df的普通(pandas 版本 1.3.4)DataFrame,df.get_loc("a")表示'DataFrame' object has no attribute 'get_loc'。我改为df["a"]。 -
我不确定我是否完全理解您要做什么,但请参阅下面的答案。考虑到数据的大小,速度非常快 (
5k * 1k = 1m)