gpt4 book ai didi

python - Pandas 列到 numpy 数组

转载 作者:行者123 更新时间:2023-12-01 08:55:26 26 4
gpt4 key购买 nike

我有以下数据框:

    name        day       value     time
0 MAC000002 2012-12-16 0.147 09:30:00
1 MAC000002 2012-12-16 0.110 10:00:00
2 MAC000002 2012-12-16 0.736 10:30:00
3 MAC000003 2012-12-16 0.404 09:30:00
4 MAC000003 2012-12-16 0.845 10:00:00

我只想将值转换为 numpy 数组:

[[0.147, 0.110, 0.736],[0.404, 0.845 ...],...]

我能想到的唯一方法是旋转数据框然后转储值:

new_df = pd.pivot_table(df,index=["name"],values=["value"])
data = new_df.values()

然而,数据集非常大,并且有数千个唯一名称,由于内存限制,我无法对表进行透视。是否有另一种方法来转储按名称保留日期然后按时间排序分组的值?

最佳答案

您可能走错了路:

  • pd.pivot_table 不会在这里得到你想要的东西,默认情况下它会按组给出平均值。虽然您想保留所有值。
  • NumPy 数组仅对固定维度有很大好处,例如每行的列数相同。在这里,这似乎可能不是真的:一组可能有 2 个值,另一组可能有 3 个值。列表的列表可能更合适。

我假设您已经按日期和时间对数据框进行了排序。那么一种解决方案是使用 GroupBy + applylist:

res = df.groupby('name', sort=False)['value'].apply(list).values.tolist()

print(res)

[[0.147, 0.11, 0.736], [0.40399999999999997, 0.845]]

通过将 'name' 转换为 categorical,您可能会看到一些性能改进。 。另一种解决方案是通过collections.defaultdict,但这可能会更慢:

from collections import defaultdict

def group_apply(df):
return df.groupby('name', sort=False)['value'].apply(list).values.tolist()

def group_dict(df):
dd = defaultdict(list)
for name, value in df[['name', 'value']].itertuples(index=False):
dd[name].append(value)
return list(dd.values())

df = pd.concat([df]*10000, ignore_index=True)

assert group_apply(df) == group_dict(df)

%timeit group_apply(df) # 8.07 ms
%timeit group_dict(df) # 39.1 ms

关于python - Pandas 列到 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52803292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com