【发布时间】:2020-05-28 08:48:53
【问题描述】:
我有一个 pandas 数据框,其中有一列包含列表。我希望将每一行中的每个列表元素除以另一列中的标量值。在以下示例中,我希望将 a 中的每个元素除以 b:
a b
0 [11, 22, 33] 11
1 [12, 24, 36] 2
2 [33, 66, 99] 3
因此产生以下结果:
a b c
0 [11, 22, 33] 11 [1.0, 2.0, 3.0]
1 [12, 24, 36] 2 [6.0, 12.0, 18.0]
2 [33, 66, 99] 3 [11.0, 22.0, 33.0]
我可以通过以下代码实现这一点:
import pandas as pd
df = pd.DataFrame({"a":[[11,22,33],[12,24,36],[33,66,99]], "b" : [11,2,3]})
result = {"c":[]}
for _, row in df.iterrows():
result["c"].append([x / row["b"] for x in row["a"]])
df_c = pd.DataFrame(result)
df = pd.concat([df,df_c], axis="columns")
但是对行进行显式迭代并将结果收集到字典中,将其转换为数据帧,然后连接到原始数据帧似乎效率低下且不优雅。
有人有更好的解决方案吗?
在此先感谢您的欢呼!
PS:如果您想知道我为什么要将列表存储在列中:这些是傅立叶变换的结果幅度。
为什么我不对每个频率使用一列?
- 为每个频率创建一个新列非常慢
- 在我的项目中,由于采样率和 FFT 窗口大小不同,因此存在多组频率。
【问题讨论】:
标签: python pandas list performance fft