在熊猫中每 4 行添加值

Posted

技术标签:

【中文标题】在熊猫中每 4 行添加值【英文标题】:Adding values per 4 rows in pandas 【发布时间】:2020-03-01 13:19:32 【问题描述】:

我用的是“pandas.read_csv”,数据如下图

   A     B      C       D
00  2019-2  315993352  7           78
01  2019-1  317515869  3           69
02  2018-4  318533054  4           66
03  2018-3  318769547  5           65
04  2018-2  319952126  6           69
05  2018-1  322476579  None        70
06  2017-4  323018027  5           63
07  2017-3  321828003  4           58
08  2017-2  321337443  3           52
09  2017-1  322300905  4           46
10  2016-4  321747881  3           45
11  2016-3  324384755  2           44
12  2016-2  456366381  5           50
13  2016-1  453014579  3           70
14  2015-4  452271967  4           115
15  2015-3  452000000  2           59
16  2015-2  453243847  None      59
17  2015-1  321738470  1           62

它有 18 行。 我想每 4 行添加 C 列的值并创建新的数据框: 第0行+第1行+第2行+第3行(7+3+4+5) 第4行+第5行+第6行+第7行(6+0+5+4) 第8行+第9行+第10行+第11行(3+4+3+2) 第12行+第13行+第14行+第15行(5+3+4+2)

而 18 不能被 4 整除 所以我想扔 row16,row17

+)而我想要的结果是

19
15
12
14

【问题讨论】:

【参考方案1】:

用途:

N = 4

#first remove last rows if remainders
df = df.iloc[:len(df) // N * N]
#convert to numeric
df['C'] = pd.to_numeric(df['C'], errors='coerce')
#aggregate sum 
df = df.groupby(np.arange(len(df)) // N)['C'].sum().to_frame()
print (df)
      C
0  19.0
1  15.0
2  12.0
3  14.0

对于整数,可以将缺失或无值替换为0

N = 4

df = df.iloc[:len(df) // N * N]

df['C'] = pd.to_numeric(df['C'], errors='coerce').fillna(0).astype(int)

df = df.groupby(np.arange(len(df)) // N)['C'].sum().to_frame()
print (df)
    C
0  19
1  15
2  12
3  14

【讨论】:

然后出现新的错误标志。 ValueError:无法将字符串转换为浮点数:'None' @MonoNeuElogy - 然后使用 df['C'] = pd.to_numeric(df['C'], errors='coerce') - 它将 None 替换为 NaN。如果我的回答有帮助,请不要忘记accept。谢谢。 真的很抱歉。我改变了我的例子。

以上是关于在熊猫中每 4 行添加值的主要内容,如果未能解决你的问题,请参考以下文章

熊猫如何通过数据框列值获取行索引

向熊猫数据框添加背景色

当这些列的名称与列表中的名称匹配时,如何跨熊猫列添加所有值?

向熊猫数据框箱线图添加标签?

如何将熊猫数据框中每列中唯一值的数量绘制为条形图?

向熊猫中的数据框添加行