iT邦幫忙

0

python dataframe加總

想請問一下如果dataframe有一組資料
我想要讓他每3筆加總一次有指令嗎?
想要變成下面sum1那樣

index data1 sum1
0 2
1 4
2 5 11
3 6 15
4 7 18
5 8 21
6 9 24
7 10 27

謝謝大家幫忙目前剛入門python..我也是用比較笨的方法去跑迴圈
因為在dataframe架構下所以我用了iloc也分享給大家

for i in range(len(data)-passcount):
print(df.iloc[i+1:i+passcount+1,0].sum())

剛申請帳號權限不足無法使用回答

你是希望每三項的加總另外成為一組資料嗎?
喔喔!!我看懂你sum1的意思了!

2 個回答

2
來杯拿鐵
iT邦新手 4 級 ‧ 2018-12-09 18:53:55
最佳解答

參考:Sum last X column values into new column
根據內容猜測為所在列數前三列總和rolling_sum()
sum[temp]=data[temp-2:temp]

pd.rolling_sum(s2['data'], 3)
表單名稱.rolling_sum(表單名稱['data'], 前三列)

import pandas as pd
import numpy as np

s2 = pd.DataFrame(np.random.randint(10,size=(8,1)),columns=["data"])
print(s2)
s2['mean_sum'] = pd.rolling_sum(s2['data'], 3)

print(s2)

https://ithelp.ithome.com.tw/upload/images/20181209/20091910u0WfwPRf2i.jpg

0
褲底農民
iT邦新手 5 級 ‧ 2018-12-09 20:21:52

也感謝樓上的高手,讓我學到許多。
我也來回答個笨方法吧!!

import pandas as pd

datas = [2, 4, 5, 6, 7, 8, 9, 10]
column = ['data1']
df = pd.DataFrame(datas, columns=column)
df['sum1'] = None

sum_total = sum([df.loc[x, 'data1'] for x in range(3)])
sum1 = [sum_total]

for i in range(len(datas)-3):
    sum_total += (df.iloc[i+3, 0] - df.iloc[i, 0])
    sum1.append(sum_total)

# df['sum1'][2:] = sum1

df.loc[2:,'sum1'] = sum1


print(sum1)
print(df)

看更多先前的回應...收起先前的回應...

不瞞各位,剛開始找不到參考文件
我好想用程式暴力破解

哈哈!我pandas也只了解基本功能一些,有需要才上網找文件。

ginbow iT邦新手 5 級 ‧ 2018-12-09 23:27:35 檢舉

另外想問一下 有辦法在畫圖時不畫NAN的資料嗎 我如果用dropna他試用整個dataframe去看

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.DataFrame([1,2,3,4,5], columns=['idx'])
df['price']=['nan',200,300,440,684]
df['price2']=['nan','nan',300,440,684]
df['price']=df['price'].astype('float64')
df['price2']=df['price2'].astype('float64')
df.set_index('idx', inplace=True)
df.plot(y='price2', use_index=True)

可用fillna()填上零

我要發表回答

立即登入回答