gpt4 book ai didi

Python:试图从 Pandas 的DataFrame中创建一个矩阵

转载 作者:行者123 更新时间:2023-12-04 15:02:31 25 4
gpt4 key购买 nike

因此,我使用 Pandas 将一些数据从数据库导入到 DataFrame 对象中。数据格式如下:

time   info    from    to    frequency
19:00 ... A X 20
19:00 ... B Z 9
21:00 ... A Y 2
21:00 ... A Z 5
23:55 ... A X 8

现在,我有两个问题需要解决:

  1. 独立于时间计算从一个点到另一个点的每个运动的频率总和,这样从 A 点到 X 点这个总和就是 28。所以你可能猜到了,“时间”和“键”是一次性 key ,在这种情况下我不需要它们。

  2. 因为我可以保证“from”中的所有点都与“to”中的点相同,所以我希望以某种矩阵的形式得到上面提到的这些总和。

我已经用下面的代码解决了这两个问题:

import pandas as pd

def make_matrix(df: pd.DataFrame):

# Get grouped version, discarding date and info...
grouped = df.groupby(['from', 'to'])['frequency'].sum()

# Fill dictionary acting as matrix...
D = {}
for (_from, _to), freq in grouped.items():
if D.get(_from):
D[_from][_to] = int(freq)
else:
D[_from] = {}

对于上下文,第一行将示例 DataFrame 转换为:

from    to    frequency
A X 28
Y 2
Z 5
B Z 9

事实是,我很确定有更好的方法来执行此操作,但我无法在 StackOverflow 或 Google 的其他地方找到它,因为这是一个非常特殊的情况。

此外,我正在寻找一种更好的方法,因为对于从点 X 到同一个点 X 的每个实例,该字典最终都没有 None/0 值。

我在想应该有一种更简单的方法来合并这些列,而不是它们以 grouped: pd.Series 的格式结束,因为必须像 (A ,X),(A,Y),(A,Z) 等等,以及必须人为地将 None 添加到字典中的 (X,X) 的微不足道的情况中,感觉非常 hacky...

编辑 1:我正在添加所需的矩阵输出...它应该是这样的:

    A     B    ...    X    Y    Z
A null 0 ... 28 2 5
B 0 null ... 0 0 9
.
.
.
X 0 0 ... 0 0 0
Y 0 0 ... 0 0 0
Z 0 0 ... 0 0 0

此外,如果在矩阵位置 M[X][A] 中有另一个元组,例如从 XA 且频率为 25,则将是 0 而不是25.

编辑 2:有可能我索引错误,它可能是转置矩阵而不是示例矩阵,无论哪种方式你都会遇到问题,它是一个非对称平方矩阵。

最佳答案

df.groupby(['from', 'to'])['frequency'].sum()
.unstack(fill_value=0)

试着写这个,我相信你会得到正确的输出

关于Python:试图从 Pandas 的DataFrame中创建一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66728398/

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