我有以下熊貓資料框(在代碼中):
original_df = pd.DataFrame([['ID1', 4], ['ID1', 4], ['ID1', 4], ['ID2', 5], ['ID2', 5], ['ID2', 5], ['ID3', 6], ['ID3', 6], ['ID3', 6]], columns=['Index', 'Value'])
根據Index值的每一次變化,只保留第一個值列的整數,其余的值應更改為0值。
生成的操縱資料框應如下所示:
desired_df = pd.DataFrame([['ID1', 4], ['ID1', 0], ['ID1', 0], ['ID2', 5], ['ID2', 0], ['ID2', 0], ['ID3', 6], ['ID3', 0], ['ID3', 0]], columns=['Index', 'Value'])
我嘗試了許多不同的操縱技術,但都沒有奏效。我已經嘗試過替換值,但這不能同時適用于多行。請問有人可以提供任何建議嗎?
uj5u.com熱心網友回復:
0如果與下一行不同,則為所有值設定Series.where:
mask = original_df['Index'].ne(original_df['Index'].shift())
original_df['Value'] = original_df['Value'].where(mask, 0)
或使用:
mask = original_df['Index'].ne(original_df['Index'].shift())
original_df['Value'] = np.where(mask, original_df['Value'], 0)
print (original_df)
Index Value
0 ID1 4
1 ID1 0
2 ID1 0
3 ID2 5
4 ID2 0
5 ID2 0
6 ID3 6
7 ID3 0
8 ID3 0
如果對組進行了排序,則可以使用Series.duplicated:
mask = original_df['Index'].duplicated()
original_df['Value'] = original_df['Value'].mask(mask, 0)
original_df['Value'] = np.where(mask, 0, original_df['Value'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434023.html
標籤:熊猫
上一篇:垂直合并兩列后,我們如何將熊貓資料框兩列轉換為python串列?
下一篇:具有相同視窗大小的滾動熊貓唯一值
