![](/img/trans.png)
[英]New level in MultiIndex DataFrame based on existing column level values
[英]Replacing values based on one level value of multiindex in a DataFrame
我有一個帶有多索引的DataFrame。 水平是gender
, type
和最后age
。 我希望在該組中將一個年齡的值替換為另一個年齡的值。 所以我猜我需要使用.groupby()
。
下面我提出一個問題的例子,我有。
這是我最初的DataFrame:
Index Gender Type Age Value
0 'f' 'a' 0 'A1'
1 'f' 'a' 1 'A2'
2 'f' 'a' 2 'B1'
3 'f' 'a' 3 'xx'
4 'f' 'a' 4 'B5'
5 'f' 'a' 5 'F3'
6 'f' 'a' 6 'B6'
7 'f' 'a' 7 'Q10'
8 'f' 'a' 8 'A3'
9 'f' 'a' 9 'A1'
10 'f' 'b' 0 'D1'
11 'f' 'b' 1 'V2'
12 'f' 'b' 2 'V1'
13 'f' 'b' 3 'xx'
14 'f' 'b' 4 'G5'
15 'f' 'b' 5 'D3'
16 'f' 'b' 6 'B6'
17 'f' 'b' 7 'Q14'
18 'f' 'b' 8 'A3'
19 'm' 'a' 0 'A1'
20 'm' 'a' 1 'A2'
21 'm' 'a' 2 'B1'
21 'm' 'a' 3 'xx'
23 'm' 'a' 4 'B5'
24 'm' 'a' 5 'A3'
25 'm' 'a' 6 'B6'
26 'm' 'a' 7 'B15'
27 'm' 'a' 8 'A3'
28 'm' 'a' 9 'A1'
29 'm' 'b' 2 'V1'
30 'm' 'b' 3 'xx'
31 'm' 'b' 4 'R5'
32 'm' 'b' 5 'B3'
33 'm' 'b' 6 'W6'
34 'm' 'b' 7 'Q12'
可見, age==3
每一行,值為xx
。 我希望在每個性別類型組中將該值替換為7歲的值。
那是:
Index Gender Type Age Value
0 'f' 'a' 0 'A1'
1 'f' 'a' 1 'A2'
2 'f' 'a' 2 'B1'
3 'f' 'a' 3 'Q10'
4 'f' 'a' 4 'B5'
5 'f' 'a' 5 'F3'
6 'f' 'a' 6 'B6'
7 'f' 'a' 7 'Q10'
8 'f' 'a' 8 'A3'
9 'f' 'a' 9 'A1'
10 'f' 'b' 0 'D1'
11 'f' 'b' 1 'V2'
12 'f' 'b' 2 'V1'
13 'f' 'b' 3 'Q14'
14 'f' 'b' 4 'G5'
15 'f' 'b' 5 'D3'
16 'f' 'b' 6 'B6'
17 'f' 'b' 7 'Q14'
18 'f' 'b' 8 'A3'
19 'm' 'a' 0 'A1'
20 'm' 'a' 1 'A2'
21 'm' 'a' 2 'B1'
21 'm' 'a' 3 'B15'
23 'm' 'a' 4 'B5'
24 'm' 'a' 5 'A3'
25 'm' 'a' 6 'B6'
26 'm' 'a' 7 'B15'
27 'm' 'a' 8 'A3'
28 'm' 'a' 9 'A1'
29 'm' 'b' 2 'V1'
30 'm' 'b' 3 'Q12'
31 'm' 'b' 4 'R5'
32 'm' 'b' 5 'B3'
33 'm' 'b' 6 'W6'
34 'm' 'b' 7 'Q12'
請注意,DataFrame不平衡,因為每個性別類型組中的年齡范圍不同。 它不啟動,並在同一時代結束了,這樣3個年齡不是每個組中相同的索引,我不能使用iloc
而是loc
以某種方式。
感謝你的幫助。
您可以定義將單獨處理每個組的自定義函數:
def fix(g):
g.loc[g['Age'] == 3, 'Value'] = g.loc[g['Age'] == 7, 'Value'].iloc[0]
return g
df.groupby(['Gender', 'Type']).apply(fix)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.