python - 使用 Python 将索引设置为 csv 文件中重复行值的组

标签 python pandas list numpy group-by

我是 python 新手。我想将索引设置为特定的一组行元素,这些元素对于每个组都是重复的。 我的数据框:

Index

data_dict ={'0_deg': [2, 11, 21, -17, 5, 40, 22, 7, 20, -6, -6, -6, 24, 21, 20, 61, 21, 5, 2, 17], 
 '10_deg': [12, -21, 11, 1, 4, -2, 33, 53, 18, 10, -3, -1, 23, 18, 23, 8, 11, -25, 21, -14], 
 '20_deg': [23, -10, 3, 20, -41, 13, 10, 5, -9, 7, -4, -21, 14, -26, -31, 9, 1, -15, 3, -6], 
 '30_deg': [12, 9, -5, 4, 9, -46, 1, -8, -27, 3, -9, -14, 15, -6, 14, 7, -11, 5, 19, -4]}
data_dict = pd.read_csv('Dataset.csv')
data_dict = data_dict.set_index('Indexes')

#row idx of a group in this list
idx =[4,10,37,109,133]

这里创建了一个列表作为 idx 并且索引值是手动写入的。

但是对于每组 1000 多个索引(随机值)的更大矩阵,这将是一项非常困难的任务。

我想要的是,当我读取 CSV 文件时,应该选择行中的第一个值,直到相同的值出现在同一索引中,它应该被视为 1 组,并且第一组的索引必须存储在idx

例如:在我的小版本数据集中,从第一列 Indexes 开始,第一个值即 4,10,37,109,133 是我的第一组索引。对于下一组,这些值以相同的顺序重复。 只有它们不应该在代码中手动输入。在下一个 4 发生之前,应该考虑一个组。因此索引值 4 到 133 必须被视为 idx 下的一组。这是因为我需要 idx 来获取代码的更多部分。

我的实际数据集每组有 1000 多个索引值。所以 idx 必须自动获取一个组的所有值。

# getting some dimensions and sorting the data
row_idx_length = len(idx) 
group_length = len(data_dict['0_deg'])
number_of_groups = len(data_dict.keys())  
idx = idx*number_of_groups   
data_arr = np.zeros((group_length,number_of_groups),dtype=np.int32) 

最佳答案

我相信你需要numpy.tile对重复次数进行整数除法:

df.index = np.tile(idx, len(df.index) // len(idx))

但是如果报错(NM是一些整数):

ValueError: Length mismatch: Expected axis has N elements, new values have M elements

这意味着在最后一组中缺少一些元素,因此通过 1 添加下一组并根据 DataFrame 的索引 的长度进行过滤:

#added 150 to idx list
idx =[4,10,37,109,133,150]
df.index = np.tile(idx, len(df.index) // len(idx) + 1)[:len(df.index)]
print (df)          
     0_deg  10_deg  20_deg  30_deg
4        2      12      23      12
10      11     -21     -10       9
37      21      11       3      -5
109    -17       1      20       4
133      5       4     -41       9
150     40      -2      13     -46
4       22      33      10       1
10       7      53       5      -8
37      20      18      -9     -27
109     -6      10       7       3
133     -6      -3      -4      -9
150     -6      -1     -21     -14
4       24      23      14      15
10      21      18     -26      -6
37      20      23     -31      14
109     61       8       9       7
133     21      11       1     -11
150      5     -25     -15       5
4        2      21       3      19
10      17     -14      -6      -4

关于python - 使用 Python 将索引设置为 csv 文件中重复行值的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56372550/

相关文章:

python - 从文件到列表中元组的字符串

python - Starmap 在传入参数之前修改参数?

java - List<String[]> float 读取 csv

python - py.test 和 fixtures - 如何只选择一种参数变体

python isdigit() 函数为非数字字符 u'\u2466' 返回 true

python - 如何将升序连续数字标记到列中的值上?

python - Pandas:在没有 for 循环的情况下更新 pandas 数据框中的列的更有效方法

python - 如何对列的成对点积求和

python - 在Python中,如何根据字符串列表从列表中删除项目?

Java 8 Lambda - 过滤两个 ArrayList