[英]How do you replace certain values from row to row in python pandas based on data in other columns?
現在,我正在使用python pandas,但找不到此問題的解決方案:我有一個數據框df,我想基於同一數據集另一列中的標簽將某些數據從一行復制到另一行(替換) 。 我認為,舉個例子是最好的方式:
Kind Type V1 V2 V3
AAA AAA 7 8 4
BBB AAA 4 8 1
CCC AAA 3 1 7
AAA BBB 2 5 3
BBB BBB 11 9 8
CCC BBB 7 7 10
AAA CCC 5 8 2
BBB CCC 2 3 7
CCC CCC 4 10 6
我想要的是為每個類型用類型BBB替換類型AAA,但僅用於行Value3(V3)。 這樣的結果將是:
Kind Type V1 V2 V3
AAA AAA 7 8 1
BBB AAA 4 8 1
CCC AAA 3 1 7
AAA BBB 2 5 8
BBB BBB 11 9 8
CCC BBB 7 7 10
AAA CCC 5 8 7
BBB CCC 2 3 7
CCC CCC 4 10 6
如您所見,這3個數字現已替換為BBB類型的值。
同
df.loc[df['Kind']=='AAA','V3'] = x # x is numeric
我只能將每個V3號替換為帶有數字x的AAA類,但這不是我想要的。 由於數字都是不同的。 有人可以幫我嗎? 謝謝!
通過boolean indexing
過濾DataFrame
並創建Series
以僅map
Kind
為AAA
行:
s = df.loc[df['Kind'] == 'BBB', ['Type', 'V3']].set_index('Type')['V3']
print (s)
Type
AAA 1
BBB 8
CCC 7
Name: V3, dtype: int64
df.loc[df['Kind']=='AAA','V3'] = df['Type'].map(s)
print (df)
Kind Type V1 V2 V3
0 AAA AAA 7 8 1
1 BBB AAA 4 8 1
2 CCC AAA 3 1 7
3 AAA BBB 2 5 8
4 BBB BBB 11 9 8
5 CCC BBB 7 7 10
6 AAA CCC 5 8 7
7 BBB CCC 2 3 7
8 CCC CCC 4 10 6
這是使用shift
的示例
df.loc[df['Kind'] == 'AAA', 'V3'] = df['V3'].shift(-1).fillna(0).astype(int)
Kind Type V1 V2 V3
0 AAA AAA 7 8 1
1 BBB AAA 4 8 1
2 CCC AAA 3 1 7
3 AAA BBB 2 5 8
4 BBB BBB 11 9 8
5 CCC BBB 7 7 10
6 AAA CCC 5 8 7
7 BBB CCC 2 3 7
8 CCC CCC 4 10 6
請注意,這取決於您的數據框按種類和類型排序,並且不匹配項的默認值為0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.