我发现自己正在尝试用经常用R data.table做的大熊猫。我认为我能够明确地描述我想要的最好的方法是通过显示类似的R操作:
fruit <- rep(c('apples', 'oranges'), 2)
date <- rep(c('2017-07-01', '2017-07-02'), each=2)
count <- 1:4
dat <- data.table(date, count, fruit)
dat变量现在包含看起来像这样的数据
date count fruit
1: 2017-07-01 1 apples
2: 2017-07-01 2 oranges
3: 2017-07-02 3 apples
4: 2017-07-02 4 oranges
假设我想按日期将所有计数相加,请将其称为&#34;水果&#34; &#34;总&#34;并将其添加到原始数据。要在R中实现这一目标,我可能会这样做(我认为这不是最优雅的方式,但我现在不要求R帮助......)
dat.total <- rbind(dat[, list(count=sum(count), fruit='total'), list(date)],
dat)
果然,dat.total看起来像这样:
date count fruit
1: 2017-07-01 3 total
2: 2017-07-02 7 total
3: 2017-07-01 1 apples
4: 2017-07-01 2 oranges
5: 2017-07-02 3 apples
6: 2017-07-02 4 oranges
所以......我试图用熊猫做这件事,我无法弄明白。就我而言:
import pandas as pd
fruit = ['apples', 'oranges'] * 2
date = ['2017-07-01', '2017-07-01', '2017-07-02', '2017-07-02']
count = [1, 2, 3, 4]
dat = pd.DataFrame({'fruit': fruit, 'date': date, 'count': count})
到目前为止,这么好。这是:
count date fruit
0 1 2017-07-01 apples
1 2 2017-07-01 oranges
2 3 2017-07-02 apples
3 4 2017-07-02 oranges
一些谷歌搜索让我到目前为止获得每个日期的总和:
agg = dat.groupby('date').sum()
但这已经成问题了。 agg似乎与dat有着根本不同的 thing 。 (把手指放在我的意思的一个特定部分上,agg.index是日期列,而dat.index是默认的RangeIndex)
我无法弄清楚如何添加水果&#34;列&#34;总&#34;对于每个值,即使我可以,我也不知道由于索引/列的不同,我可以很容易地连接这些东西。
似乎我的方法完全错了,但我很难搞清楚google的内容。
只是要清楚地知道我到底想要做什么:我希望得到一只大熊猫DataFame,它与我在开始时展示的R转换相似。我想 TL; DR 是我试图去的地方:
date count fruit
1: 2017-07-01 1 apples
2: 2017-07-01 2 oranges
3: 2017-07-02 3 apples
4: 2017-07-02 4 oranges
到
date count fruit
1: 2017-07-01 3 total
2: 2017-07-02 7 total
3: 2017-07-01 1 apples
4: 2017-07-01 2 oranges
5: 2017-07-02 3 apples
6: 2017-07-02 4 oranges
agg = dat.groupby('date').sum()
的第一步似乎很有希望,但我不知道下一步该去哪,或者这已经走错了路。
答案 0 :(得分:3)
使用groupby
,append
和assign
df.groupby('date')['count'].sum().reset_index() \
.assign(fruit='total').append(df, ignore_index=True)
date count fruit
0 2017-07-01 3 total
1 2017-07-02 7 total
2 2017-07-01 1 apples
3 2017-07-01 2 oranges
4 2017-07-02 3 apples
5 2017-07-02 4 oranges