我有一個包含三列的資料框:“Bin No”、“Intervals”和“Other”,其中前兩個包含數值,最后一個包含物件型別的值。如果“Bin No”中的值不止一次存在,我試圖折疊行,保留其他兩列的值。我當前的 DataFrame 如下所示:
Intervals Bin No Other
0 1.5 1
1 2.5 2
4 3.5 3
6 4.5 4
8 5.5 5
9 8.5 6
11 12.5 7
2 16.0 8
3 22.0 9
5 37.0 10
12 10 [-99999997, -3]
7 61.0 11
10 87.0 12
13 14 -2
14 15 -1
在這種情況下,10 在“Bin No”中出現兩次,因此資料框應如下所示:
Bin No Intervals Other
0 1 1.5
7 2 2.5
8 3 3.5
9 4 4.5
10 5 5.5
11 6 8.5
12 7 12.5
13 8 16.0
14 9 22.0
2 10 37.0 [-99999997, -3]
3 11 61.0
4 12 87.0
5 14 -2
6 15 -1
我已經設法使用以下代碼找到了解決方案,但是我擔心這可能會在以后產生問題df.drop_duplicates:
df_one = df.groupby('Bin No', as_index=False).agg(''.join)
df_two = pd.merge(df_two, df.drop('Intervals', axis=1), how='left', on='Bin No')
df_three = df_two.drop_duplicates('Bin No', keep='last')
有沒有更有效、更簡潔的解決方案?
uj5u.com熱心網友回復:
您可以用 NaN 值替換空字串;然后使用groupby first(利用first跳過 NaN 的事實)。您可以將 NaN 替換回空字串,但我想這有點多余:
out = df.replace('', np.nan).groupby('Bin No', as_index=False)[['Intervals', 'Other']].first()
out['Other'] = out['Other'].fillna('')
輸出:
Bin_No Intervals Other
0 1 1.5
1 2 2.5
2 3 3.5
3 4 4.5
4 5 5.5
5 6 8.5
6 7 12.5
7 8 16.0
8 9 22.0
9 10 37.0 [-99999997, -3]
10 11 61.0
11 12 87.0
12 14 NaN -2
13 15 NaN -1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429582.html
上一篇:逐行融化資料幀(如numpy.ndarray.reshape)
下一篇:修改資料框中的列
