我有以下資料框:
data = {'name':['sam','rye','lori','chris','sara'],
'ha':[0.020,1,0.05,0.7,0.001],
'he':[1,1,0.1,0.0001,1],
'hi':[0.001,0.002,0.0021,0.3,0.005],
'ho':[0.0002,0.0043,0.0067,0.0123,0.0110],
'hu':[0.7500,0.0540,0.0030,1,0.0081],
'hm':[0.002,0.0021,0.3,0.005,1]}
df = pd.DataFrame(data)
df.set_index('name')
ha he hi ho hu hm
name
sam 0.020 1.0000 0.0010 0.0002 0.7500 0.0020
rye 1.000 1.0000 0.0020 0.0043 0.0540 0.0021
lori 0.050 0.1000 0.0021 0.0067 0.0030 0.3000
chris 0.700 0.0001 0.3000 0.0123 1.0000 0.0050
sara 0.001 1.0000 0.0050 0.0110 0.0081 1.0000
我有這本詞典
dict1 = {'ha': { 'sam' : 0.020, 'rye' : -0.018, 'lori': 0.05, 'chris': 0.7, 'sara' : 0.001},
'he': { 'sam' : 0.00005, 'rye' : 0, 'lori': 1, 'chris': -2, 'jesse' : 5}}
我想使用這個字典來替換給定以下條件的行中的值。對于每一行,如果列值大于字典值,則使用字典替換,否則保留當前值。
這就是我所做的遠,但它失敗了。我試圖用回圈來做到這一點。
row = 0
for item in range(0,len(df)):
row = row 1
for i in dict1:
if df.at[row, 'ha'] >= dict1[i]:
df.at[row, 'ha'] = dict1[i]
uj5u.com熱心網友回復:
- 使用您
dict1創建一個具有與以下相同索引和列的新 DataFramedf:
otherdf = pd.DataFrame(dict1).reindex(index=df.index, columns=df.columns)
- 替換
df大于的值otherdf:
df[df > otherdf] = otherdf
df 就是現在:
ha he hi ho hu hm
name
sam 0.020 0.00005 0.0010 0.0002 0.7500 0.0020
rye -0.018 0.00000 0.0020 0.0043 0.0540 0.0021
lori 0.050 0.10000 0.0021 0.0067 0.0030 0.3000
chris 0.700 -2.00000 0.3000 0.0123 1.0000 0.0050
sara 0.001 1.00000 0.0050 0.0110 0.0081 1.0000
在上面,otherdf與原始資料具有相同的形狀,但包含來自dict1. 所以它可以用來進行布爾比較:
>>> otherdf
ha he hi ho hu hm
name
sam 0.020 0.00005 NaN NaN NaN NaN
rye -0.018 0.00000 NaN NaN NaN NaN
lori 0.050 1.00000 NaN NaN NaN NaN
chris 0.700 -2.00000 NaN NaN NaN NaN
sara 0.001 NaN NaN NaN NaN NaN
>>> df > otherdf
ha he hi ho hu hm
name
sam False True False False False False
rye True True False False False False
lori False False False False False False
chris False True False False False False
sara False False False False False False
uj5u.com熱心網友回復:
遍歷字典,然后替換值。準確設定您的索引“名稱”。
import pandas as pd
data = {'name':['sam','rye','lori','chris','sara'],
'ha':[0.020,1,0.05,0.7,0.001],
'he':[1,1,0.1,0.0001,1],
'hi':[0.001,0.002,0.0021,0.3,0.005],
'ho':[0.0002,0.0043,0.0067,0.0123,0.0110],
'hu':[0.7500,0.0540,0.0030,1,0.0081],
'hm':[0.002,0.0021,0.3,0.005,1]}
df = pd.DataFrame(data,index=data['name'])
#df.set_index('name')
for i,j in dict1.items():
#
for m,n in j.items():
#print(m,n)
if m in df.index.tolist():
#
if df.loc[m,i] >= n:
df.loc[m,i]=n
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/329722.html
上一篇:回圈以從兩個dfR中創建假人
