回答編集履歴

2

追記

2022/12/06 08:22

投稿

can110
can110

スコア38266

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  のであれば`df[df["power"] == df["power"].max()*0.5]`で抽出できます。
4
4
  ただし厳密に値が一致する行がない可能性もあるので、差の絶対値をとってその最小値と一致する行を抽出するのがよいかと思います。
5
- あるいは50%以上となる行を`idxmax`で探すのが単純でよいかもしれません。
5
+ あるいは、`power`が単調増加するのであれば、50%以上となる行を`idxmax`で探すのが単純でよいかもしれません。
6
6
  ```Python
7
7
  import pandas as pd
8
8
 

1

追記

2022/12/06 07:18

投稿

can110
can110

スコア38266

test CHANGED
@@ -2,21 +2,30 @@
2
2
 
3
3
  のであれば`df[df["power"] == df["power"].max()*0.5]`で抽出できます。
4
4
  ただし厳密に値が一致する行がない可能性もあるので、差の絶対値をとってその最小値と一致する行を抽出するのがよいかと思います。
5
+ あるいは50%以上となる行を`idxmax`で探すのが単純でよいかもしれません。
5
6
  ```Python
6
7
  import pandas as pd
7
8
 
9
+ vals = [i for i in range(21)]
8
- df = pd.DataFrame({'power':[i for i in range(21)]})
10
+ df = pd.DataFrame({'flame':vals, 'power':vals})
9
11
  ret = df[df['power'] == df['power'].max()*0.5]
10
12
  print(ret)
11
- # power
13
+ # flame power
12
- #10 10
14
+ #10 10 10
13
15
 
16
+ vals = [i for i in range(20)]
14
- df = pd.DataFrame({'power':[i for i in range(20)]})
17
+ df = pd.DataFrame({'flame':vals, 'power':vals})
15
18
  dist = (df['power'] - df['power'].max()*0.5).abs()
16
19
  ret = df[dist == dist.min()]
17
20
  print(ret)
18
- # power
21
+ # flame power
19
- #9 9
22
+ #9 9 9
23
+ #10 10 10
24
+
25
+ ret = (df['power'] >= df['power'].max()*0.5).idxmax()
26
+ ret = df.iloc[ret]
27
+ print(ret)
20
- #10 10
28
+ #flame 10
29
+ #power 10
30
+ #Name: 10, dtype: int64
21
31
  ```
22
-