回答編集履歴
1
追記
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
|
|