【发布时间】:2015-02-06 21:18:24
【问题描述】:
我正在尝试从 groupby 中的第一个非顺序“期间”开始删除数据框中的任何行。如果可能的话,我宁愿避免循环。
import pandas as pd
data = {'Country': ['DE', 'DE', 'DE', 'DE', 'DE', 'US', 'US', 'US', 'US','US'],
'Product': ['Blue', 'Blue', 'Blue', 'Blue','Blue','Green', 'Green', 'Green', 'Green','Green'],
'Period': [1, 2, 3,5,6, 1, 2, 4, 5, 6]}
df = pd.DataFrame(data, columns= ['Country','Product', 'Period'])
print df
输出:
Country Product Period
0 DE Blue 1
1 DE Blue 2
2 DE Blue 3
3 DE Blue 5
4 DE Blue 6
5 US Green 1
6 US Green 2
7 US Green 4
8 US Green 5
9 US Green 6
例如,我想要的最终输出如下:
Country Product Period
0 DE Blue 1
1 DE Blue 2
2 DE Blue 3
5 US Green 1
6 US Green 2
我试图这样做的方式如下,可以给你一个想法,但我有很多错误。但是您可能会看到我正在尝试做的事情的逻辑。
df = df.groupby(['Country','Product']).apply(lambda x: x[x.Period.shift(x.Period - 1) == 1]).reset_index(drop=True)
棘手的部分不仅仅是使用 .shift(1) 或我试图在 .shift() 中输入一个值的东西,即如果该行 Period 为 5,那么我想说 .shift(5-1)因此它向上移动 4 个位置并检查该 Period 的值。如果它等于 1,则表示它仍然是连续的。在这种情况下,我猜它会进入南区。
【问题讨论】: