![](/img/trans.png)
[英]Replace values of certain column and rows in a DataFrame with the value of another column in the same dataframe with Pandas
[英]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.