簡體   English   中英

如何在pandas DataFrame中通過共享列值替換某些行?

[英]How to replace certain rows by shared column values in pandas DataFrame?

假設我有以下pandas DataFrame:

import pandas as pd

data = [['Alex',10],['Bob',12],['Clarke',13], ['Bob', '#'], ['Bob', '#'], ['Bob', '#']]

df = pd.DataFrame(data,columns=['Name','Age'], dtype=float)
print(df)
     Name Age
0    Alex  10
1     Bob  12
2  Clarke  13
3     Bob   #
4     Bob   #
5     Bob   #

因此, Bob的DataFrame中有奇數行,即行3,4和5.這些值始終為# ,而不是12.第1行顯示Bob應為12,而不是#

在這個例子中,使用replace()來解決這個問題很簡單:

df = df.replace("#", 12)
print(df)
     Name Age
0    Alex  10
1     Bob  12
2  Clarke  13
3     Bob   12
4     Bob   12
5     Bob   12

但是,這不適用於較大的數據幀,例如

     Name Age
0    Alex  10
1     Bob  12
2  Clarke  13
3     Bob   #
4     Bob   #
5     Bob   #
6  Clarke   #

第6行應該是6 Clarke 13

如何使用#替換Age任何行,並使用其他行中給出的正確整數(基於Name 如果#存在,請檢查具有相同Name值的其他行並替換#

您想使用有效值來填充無效值嗎? 在這種情況下,使用map

v = df.assign(Age=pd.to_numeric(df['Age'], errors='coerce')).dropna()
df['Age'] = df['Name'].map(v.set_index('Name').Age)  

df
     Name   Age
0    Alex  10.0
1     Bob  12.0
2  Clarke  13.0
3     Bob  12.0
4     Bob  12.0
5     Bob  12.0
6  Clarke  13.0

試試這個,

d= df[df['Age']!='#'].set_index('Name')['Age']
df['Age']=df['Name'].replace(d)

O / P:

     Name Age
0    Alex  10
1     Bob  12
2  Clarke  13
3     Bob  12
4     Bob  12
5     Bob  12
6  Clarke  13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM