gpt4 book ai didi

python - Pandas 中分类变量的顺序

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:37 24 4
gpt4 key购买 nike

我有一个如下所示的 Pandas 数据框:

Input DataFrame

其中,a, b, c, d是分类变量使得 a < b < c < db > 3 * a , c > 2 * bd > 1.5 * c .如果给出了这些显式关系,我如何将行添加到具有所有其他隐式关系(例如 c > 6 * a)的数据框中, d > 9 * a , 和 d > 3 * b .

有什么想法吗?

最佳答案

假设您有一个如下所示的数据框(为了便于阅读,我添加了列名)

df
Cat1 Cat2 Relationship
0 a b 3.0
1 b c 2.0
2 c d 1.5

首先将 df 本身合并到前 2 列,然后通过将合并行上的原始 2 个关系值相乘来计算新的关系值。重复相同的操作,直到所有关系都达到。

import pandas as pd
df = pd.DataFrame(data=[['a', 'b', 3],
['b', 'c', 2],
['c', 'd', 1.5]],
columns=['Cat1', 'Cat2', 'Relationship'])
max_length_of_relationships = len(df)
for i in range(max_length_of_relationships):
df2 = df.merge(df, left_on='Cat2', right_on='Cat1')
df2['Relationship'] = df2['Relationship_x'] * df2['Relationship_y']
df2 = df2[['Cat1_x', 'Cat2_y', 'Relationship']]
df2.columns = ['Cat1', 'Cat2', 'Relationship']
df = df.append(df2).drop_duplicates()

产量

df
Cat1 Cat2 Relationship
0 a b 3.0
1 b c 2.0
2 c d 1.5
0 a c 6.0
1 b d 3.0
1 a d 9.0

这里的棘手点是我假设 max_length_of_relationships 是数据帧的行数,这实际上是最坏的情况。如果您有一个大数据帧而 max_length_of_relationships 很小,那么性能会很差。在这种情况下,您可能需要使用 networkx正如@Quang 所建议的那样,在图中找到最长的路径。

代码示例

import networkx as nx
G=nx.from_pandas_edgelist(df, 'Cat1', 'Cat2', edge_attr=True, create_using=nx.DiGraph())
print(nx.dag_longest_path(G))
max_length_of_relationships = nx.dag_longest_path_length(G)

关于python - Pandas 中分类变量的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332903/

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