有这样的DF:
df = pd.DataFrame({'Art': [210, 211, 212, 310, 420, 421], 'Sum': [300, 120, 180, 250, 650, 650]})
表视图中的
Art Sum
0 210 300 # this is total
1 211 120 # children for index 0
2 212 180 # children for index 0
3 310 250 # !!! this is Not total
4 420 650 # this is total
5 421 650 # children for index 4
总行是Art
结束0
的行,但没有以相同的两位数开头的子行。
艺术210
有孩子: 21 1, 21 2
艺术310
没有孩子没有行 31
问题:需要删除总行数。
结果需要:
Art Sum
1 211 120
2 212 180
3 310 250 # !! this is Not total
5 421 650
怎么做?
答案 0 :(得分:1)
您可以根据前两位数对 Art 列编制索引并进行相应过滤:
buckets = (df['Art'] // 10).value_counts()
df = df.loc[(df['Art'] // 10).isin(buckets.loc[buckets == 1].index) |
(df['Art'] % 10 != 0)]
哪个输出:
Art Sum
1 211 120
2 212 180
3 310 250
5 421 650
答案 1 :(得分:1)
这也有效:
A=df.Art.astype(str).str.endswith("0")
说明:
B=df.Art.astype(str).str[:2].duplicated(keep=False)
:检查哪些值以0结尾