添加常量值列,该列向下变为pandas数据帧的一半

时间:2016-11-17 14:11:04

标签: python pandas dataframe

我有清单:

[['abc', 1, 2, 3], ['bfg', 4, 5, 6], ['abc', 7, 8, 9], ['bfg', 10, 11, 12]]

然后我将它变成一个pandas DataFrame,它返回(在添加颜色为lst[4] = 'blue'的列之后):

     0   1   2   3     4
0  abc   1   2   3  blue
1  bfg   4   5   6  blue
2  abc   7   8   9  blue
3  bfg  10  11  12  blue

无论如何都要让它返回:

     0   1   2   3     4
0  abc   1   2   3  blue
1  bfg   4   5   6  blue
2  abc   7   8   9  red
3  bfg  10  11  12  red

3 个答案:

答案 0 :(得分:1)

DataFrame.from_records的解决方案:

lst = [['abc', 1, 2, 3], ['bfg', 4, 5, 6], ['abc', 7, 8, 9], ['bfg', 10, 11, 12]]
df = pd.DataFrame.from_records(lst)
print (df)

     0   1   2   3
0  abc   1   2   3
1  bfg   4   5   6
2  abc   7   8   9
3  bfg  10  11  12

loc添加值:

l = len(df.index) // 2 
df.loc[:l - 1, 4] = 'blue'
df.loc[l:, 4] = 'red'
print (df)
     0   1   2   3     4
0  abc   1   2   3  blue
1  bfg   4   5   6  blue
2  abc   7   8   9   red
3  bfg  10  11  12   red

更有意思的是,df - 地板分区//有多长的奇数:

lst = [['abc', 1, 2, 3], ['bfg', 4, 5, 6], ['abc', 7, 8, 9], 
       ['bfg', 10, 11, 12], ['bfg', 3, 4, 5]]
df = pd.DataFrame.from_records(lst)
print (df)
     0   1   2   3
0  abc   1   2   3
1  bfg   4   5   6
2  abc   7   8   9
3  bfg  10  11  12
4  bfg   3   4   5

l = len(df.index) // 2 
df.loc[:l, 4] = 'blue'
df.loc[l:, 4] = 'red'
print (df)
     0   1   2   3     4
0  abc   1   2   3  blue
1  bfg   4   5   6  blue
2  abc   7   8   9   red
3  bfg  10  11  12   red
4  bfg   3   4   5   red

或正常分工/

l = len(df.index) / 2 
df.loc[:l, 4] = 'blue'
df.loc[l:, 4] = 'red'
print (df)
     0   1   2   3     4
0  abc   1   2   3  blue
1  bfg   4   5   6  blue
2  abc   7   8   9  blue
3  bfg  10  11  12   red
4  bfg   3   4   5   red

答案 1 :(得分:1)

除了np.repeat之外,还可以使用np.resize进行简化,以解释由于浮点除法造成的大小损失。

lst[4] = np.resize(np.repeat(['blue', 'red'], lst.shape[0] // 2), lst.shape[0])

答案 2 :(得分:0)

最简单的是:

lst.loc[len(lst)/2:, 4] = 'red'