首页 > 解决方案 > 按变量重新索引 CSV 文件

问题描述

所以,我有一个 CSV 文件:[较小的样本]

value,variable,comparison
260,5,0
266,5,0
272,6,0
418,7,1
416,7,1
260,1,0
320,1,0
558,1,0
306,2,0
568,2,0
544,2,0
310,3,0
558,3,0
446,3,0
262,4,0
394,4,0

本质上,需要发生的是列variable需要重新索引,因此不是在当前索引中排序,5,6,7,1,2,4而是需要1,2,3,4,5,6,7 排序。需要保留数据的位置。不知道如何做到这一点,将回答任何人的任何问题。我考虑过可能使用 pandas 库,或者将 CSV 文件拆分为多个字典,然后将键更改为 1、2、3、4、5 等。

目前,为了获得当前输出,我在 pandas 中使用了堆叠功能,然后输出到 CSV。这是我的代码:

    index_column_name ='value'
    dt = dataset.iloc[:,9:16].stack().sort_index(level=1).reset_index(level=0, drop=True).to_frame()
    #Create the "index_value" column
    dt['variable'] = pandas.Categorical(dt.index).codes+1
    dt.rename(columns={0:index_column_name}, inplace=True)
    dt.set_index(index_column_name, inplace=True)
    dt.to_csv(filename + ".csv", sep=',')

期望的输出:

260,1,0
266,1,0
272,2,0
418,3,1
416,3,1
260,4,0
320,4,0
558,4,0
306,5,0
568,5,0
544,5,0
310,6,0
558,6,0
446,6,0
262,7,0
394,7,0

同样,我需要数据的实际位置相同,因此不使用排序功能,不同组variable需要位于同一位置。

标签: pythonpandascsv

解决方案


你可以试试:

reordering_map = {old_value: new_value for old_value, new_value in zip(df.variable.unique(), range(1, len(df.variable.unique()) + 1) )}

print(reordering_map)
# output: {5: 1, 6: 2, 7: 3, 1: 4, 2: 5, 3: 6, 4: 7}

df.variable = df.variable.apply(lambda x: reordering_map[x])

df

在此处输入图像描述


推荐阅读