Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据秩值按列表元素填充数据帧_Python - Fatal编程技术网

Python 根据秩值按列表元素填充数据帧

Python 根据秩值按列表元素填充数据帧,python,Python,我有一个排名值的数据框,例如,1表示最佳,5表示最差。索引是我的示例,列是特征 输入: 索引A B C D E 项目1 1 4 2 3 5 项目2 3 4 5 1 项目3 2 5 4 3 1 我想创建一个Dataframe,根据功能的等级显示其元素。列是从1到5的等级,内容是功能 输出: 索引12345 项目1 A C D B E 项目2 E A B C D 项目3 E A D C B 这里有一种使用熊猫的方法: 我不确定您的数据帧以何种格式开始(csv?pandas dataframe?)

我有一个排名值的数据框,例如,1表示最佳,5表示最差。索引是我的示例,列是特征

输入:

索引A B C D E
项目1 1 4 2 3 5
项目2 3 4 5 1
项目3 2 5 4 3 1

我想创建一个Dataframe,根据功能的等级显示其元素。列是从1到5的等级,内容是功能

输出:

索引12345
项目1 A C D B E
项目2 E A B C D
项目3 E A D C B


这里有一种使用熊猫的方法:

我不确定您的数据帧以何种格式开始(csv?pandas dataframe?),但在任何情况下,您首先需要将数据帧放入pandas中,如下所示:

>>> df
       A  B  C  D  E
index               
item1  1  4  2  3  5
item2  2  3  4  5  1
item3  2  5  4  3  1
import pandas as pd
df_dict = df.T.to_dict()
sorted_vals = [sorted(df_dict[i], key=df_dict[i].get) for i in df_dict.keys()]
new_df=pd.DataFrame(sorted_vals,
                    index=df.index,
                    columns=list(range(1,len(df.columns)+1)))

>>> new_df
       1  2  3  4  5
index               
item1  A  C  D  B  E
item2  E  A  B  C  D
item3  E  A  D  C  B
>>> df_dict
{'item1': {'A': 1, 'B': 4, 'C': 2, 'D': 3, 'E': 5}, 'item2': {'A': 2, 'B': 3, 'C': 4, 'D': 5, 'E': 1}, 'item3': {'A': 2, 'B': 5, 'C': 4, 'D': 3, 'E': 1}}
然后,您可以按照您希望的方式操作它,如下所示:

>>> df
       A  B  C  D  E
index               
item1  1  4  2  3  5
item2  2  3  4  5  1
item3  2  5  4  3  1
import pandas as pd
df_dict = df.T.to_dict()
sorted_vals = [sorted(df_dict[i], key=df_dict[i].get) for i in df_dict.keys()]
new_df=pd.DataFrame(sorted_vals,
                    index=df.index,
                    columns=list(range(1,len(df.columns)+1)))

>>> new_df
       1  2  3  4  5
index               
item1  A  C  D  B  E
item2  E  A  B  C  D
item3  E  A  D  C  B
>>> df_dict
{'item1': {'A': 1, 'B': 4, 'C': 2, 'D': 3, 'E': 5}, 'item2': {'A': 2, 'B': 3, 'C': 4, 'D': 5, 'E': 1}, 'item3': {'A': 2, 'B': 5, 'C': 4, 'D': 3, 'E': 1}}
要引导您完成它,第一步(
df.T.To_dict()
)创建一个如下所示的字典:

>>> df
       A  B  C  D  E
index               
item1  1  4  2  3  5
item2  2  3  4  5  1
item3  2  5  4  3  1
import pandas as pd
df_dict = df.T.to_dict()
sorted_vals = [sorted(df_dict[i], key=df_dict[i].get) for i in df_dict.keys()]
new_df=pd.DataFrame(sorted_vals,
                    index=df.index,
                    columns=list(range(1,len(df.columns)+1)))

>>> new_df
       1  2  3  4  5
index               
item1  A  C  D  B  E
item2  E  A  B  C  D
item3  E  A  D  C  B
>>> df_dict
{'item1': {'A': 1, 'B': 4, 'C': 2, 'D': 3, 'E': 5}, 'item2': {'A': 2, 'B': 3, 'C': 4, 'D': 5, 'E': 1}, 'item3': {'A': 2, 'B': 5, 'C': 4, 'D': 3, 'E': 1}}
从中,您可以按其值对每个子字典进行排序(
sorted\u vals=[sorted(df\u dict[i],key=df\u dict[i].get)for df\u dict.keys()]
),结果如下:

>>> sorted_vals
[['A', 'C', 'D', 'B', 'E'], ['E', 'A', 'B', 'C', 'D'], ['E', 'A', 'D', 'C', 'B']]

最后一行从列表列表中生成新的数据框,并使用1到n_列作为列名

数据框的起始格式是什么?这正是我需要的!我的数据是一个数据框,谢谢!我还有一个问题,为什么我在排序时需要“df_dict.keys()中的I”,以及为什么在创建新数据帧时需要“我在排序中的I”?它会工作得更快吗?事实上,你是对的,你不需要
i for i in sorted\u vals
。我已经编辑了我的答案for i只是迭代字典键,以便对每个子字典进行排序。您真的很有帮助!非常感谢。