如何基于一列中的条件获取列表中特定列值的总和

时间:2019-07-04 13:19:19

标签: python pandas

我有如下列表,长度为8,其中包含按日期排列的数据

['2019-07-04', 'default_default', 'FB', 'ios', '0', '0', '0', '0']
['2019-07-04', 'default_default', 'FB', 'default', '1', '1', '0', '1']
['2019-07-04', 'default_default', 'FB', 'android', '0', '0', '0', '0']
['2019-07-04', 'default_default', 'NON-FB', 'android', '2', '1', '1', '1']
['2019-07-04', 'default_default', 'NON-FB', 'default', '1', '2', '1', '1']
['2019-07-04', 'default_default', 'NON-FB', 'ios', '1', '1', '1', '2']

我想获取 FB NON-FB 的第5列,第6列的计数,以此类推,以得出日期 2019-07-04 < / strong>

所以最终列表将是

date|FB|NON-FB|total

[2019-07-04,1,4,5]
[2019-07-05,1,2,4]
... 
.. so on

下面是我的代码

 dic={}
 data=[str(item) for item in datewise]
 data[0]="date"
 dic[data[0]]={"FB":0,"NON-FB":0}
 dic[data[0]]["FB"]=sum(row[5] for row in data if row=="FB")

现在我正在处理循环和字典,是否有任何简单的方法来获得所需的输出?

1 个答案:

答案 0 :(得分:2)

您可以使用循环,但是看起来像这样并且需要像您描述的那样进行操作的数据是熊猫的一个好用例:

import pandas as pd

df = (pd.DataFrame(datewise, 
                   columns=['col0','col1','col2','col3','col4','col5','col6','col7'])
 .assign(col5= lambda d: d.col5.astype(int))
 .pivot_table(index='col0', columns='col2', values='col5', aggfunc=sum)
 .assign(total= lambda d: d.sum(axis=1))
)

print(df)