回答編集履歴

1

追記

2022/06/06 08:31

投稿

8524ba23
8524ba23

スコア38352

test CHANGED
@@ -5,7 +5,10 @@
5
5
 
6
6
  とあるように、両者に何らかの制約条件があるなら、その条件で絞る(さらに重複していたらdrop_する)とよいです。
7
7
 
8
+ あるいは、同じ`year`が複数存在するID(複数)行全体を削除することもできます。
9
+
8
10
  ```Python
11
+
9
12
  import pandas as pd
10
13
  from io import StringIO
11
14
 
@@ -29,6 +32,7 @@
29
32
  df2 = df.drop_duplicates('year')
30
33
  print(df2)
31
34
  """
35
+ year
32
36
  ID age
33
37
  1 10 2012
34
38
  11 2011
@@ -46,5 +50,18 @@
46
50
  11 2011
47
51
  2 22 2000
48
52
  """
53
+
54
+ # yearが重複しているID(複数)行全体を削除したいなら
55
+ df_g1 = (df.groupby(['ID','year']).size() <= 1) # yearが重複していなければTrue
56
+ df_g2 = (df_g1.groupby('ID').sum() >= 1) # yearが重複していないID行ならTrue
57
+ df_g3 = df_g2[df_g2] # 条件に一致するIDを抽出
58
+ filter = (df.index.get_level_values(0).isin( df_g3.index)) # ID値で抽出
59
+ df2 = df[filter]
60
+ print(df2)
61
+ """
62
+ ID age
63
+ 1 10 2012
64
+ 11 2011
65
+ """
49
66
  ```
50
67