Python 根据秩值按列表元素填充数据帧
我有一个排名值的数据框,例如,1表示最佳,5表示最差。索引是我的示例,列是特征 输入: 索引A B C D EPython 根据秩值按列表元素填充数据帧,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 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
。我已经编辑了我的答案