我目前正在处理具有相同标头的r个数据帧。我想选择除了一个以外的所有内容(例如,除了' Apple')并通过在它们旁边添加数据框号来更改它们。
在这种情况下,我的所有r数据帧都有:
Apple Orange Pear ...
0 70 5 3 ...
1 15 1 4 ...
2 17 1 6 ...
3 26 2 7 ...
4 12 1 2 ...
5 16 1 0 ...
6 13 1 1 ...
我试过了:
for r in range(len(csv_files)):
dfs[r].columns = [col_name + ' R{}'.format(r+1) for col_name in dfs[r].columns]
对于数据帧1,
Apple R1 Orange R1 Pear R1 ...
0 70 5 3 ...
1 15 1 4 ...
2 17 1 6 ...
3 26 2 7 ...
4 12 1 2 ...
5 16 1 0 ...
6 13 1 1 ...
对于数据帧2,
Apple R2 Orange R2 Pear R2 ...
0 70 5 3 ...
1 15 1 4 ...
2 17 1 6 ...
3 26 2 7 ...
4 12 1 2 ...
5 16 1 0 ...
6 13 1 1 ...
对于数据帧3,
Apple R3 Orange R3 Pear R3 ...
0 70 5 3 ...
1 15 1 4 ...
2 17 1 6 ...
3 26 2 7 ...
4 12 1 2 ...
5 16 1 0 ...
6 13 1 1 ...
这给了我几乎我想要的东西,但是我无法在这个动作中找到如何不包括[' Apple'],例如在数据帧3上:
Apple Orange R3 Pear R3 ...
0 70 5 3 ...
1 15 1 4 ...
2 17 1 6 ...
3 26 2 7 ...
4 12 1 2 ...
5 16 1 0 ...
6 13 1 1 ...
谢谢:)
答案 0 :(得分:1)
如果列和Apple
的相同位置始终是第一个:
for r in range(len(csv_files)):
dfs[r].columns = ['Apple'] +
[col_name + ' R{}'.format(r+1) for col_name in dfs[r].columns[1:]]
没有定义列位置的更一般的解决方案:
for r in range(len(csv_files)):
dfs[r].columns = [c if c == 'Apple' else c + ' R{}'.format(r+1) for c in dfs[r].columns]
答案 1 :(得分:0)
您可以使用
for r in range(len(csv_files)):
newcols = dfs[r].columns[1:] + ' R{}'.format(r)
dfs[r].columns = ['Apple'] + newcols.tolist()
或者,使用map
之类的
for r in range(len(csv_files)):
newcols = dfs[r].columns[1:].map(lambda x: '{} R{}'.format(x, r))
dfs[r].columns = ['Apple'] + newcols.tolist()