如何在特定行的列中写入值?

时间:2018-11-20 07:22:09

标签: python excel pandas

我有一个excel文件,我需要在一组特定的行中写入特定的值: 例如:我有20行5列 我需要添加新列,并写入新列值(在前5行中为x,在后5行中为下5个值(y),依此类推)。 我可以知道如何实现吗?

col1    col2    col3   col4     
1       a1      b1     c1       
2       a2      *   *   
3   a3  *   *   
4   a4  *   *       
5   a5  *   *       
6   a6  *   *       
7   a7  *   *       
8   a8  *   *       
9   a9  *   *
10  a10 *   *
11  a11 *   *
12  a12 *   *
13  a13 *   *
14  a14 *   *
15  a15 *   *
16  a16 *   c16
17  a17 *   c17
18  a18 *   c18
19  a19 *   c19

我需要这样的输出:

col1    col2    col3   col4    colnew
1       a1      b1     c1   aa
2       a2      *   *   aa  
3   a3  *   *   aa
4   a4  *   *   aa  
5   a5  *   *   aa  
6   a6  *   *   bb  
7   a7  *   *   bb  
8   a8  *   *   bb  
9   a9  *   *   bb
10  a10 *   *   bb
11  a11 *   *   cc
12  a12 *   *   cc
13  a13 *   *   cc
14  a14 *   *   cc
15  a15 *   *   cc
16  a16 *   c16 dd
17  a17 *   c17 dd
18  a18 *   c18 dd
19  a19 *   c19 dd

1 个答案:

答案 0 :(得分:1)

首先按5进行地板分割,然后按字典进行map分割-如果字典中缺少某些值,则在输出列中获取NaN s:

vals = ['aa','bb','cc','dd','ee']
d = dict(enumerate(vals))
print (d)
{0: 'aa', 1: 'bb', 2: 'cc', 3: 'dd', 4: 'ee'}

#default range index 
df['new'] = (df.index // 5).map(d.get)
#general solution
#df['new'] = pd.Series(np.arange(len(df)) // 5, index=df.index).map(d)
print (df)
    col1 col2 col3 col4 new
0      1   a1   b1   c1  aa
1      2   a2    *    *  aa
2      3   a3    *    *  aa
3      4   a4    *    *  aa
4      5   a5    *    *  aa
5      6   a6    *    *  bb
6      7   a7    *    *  bb
7      8   a8    *    *  bb
8      9   a9    *    *  bb
9     10  a10    *    *  bb
10    11  a11    *    *  cc
11    12  a12    *    *  cc
12    13  a13    *    *  cc
13    14  a14    *    *  cc
14    15  a15    *    *  cc
15    16  a16    *  c16  dd
16    17  a17    *  c17  dd
17    18  a18    *  c18  dd
18    19  a19    *  c19  dd