我想有条件地更新我的dataframe列中的值。
我正在处理一家冰激凌店,以及它面临的投诉。问题和这些问题的总数存储在字典中:
myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}我还有一个更大的df,它包含了冰淇淋店一个月的数据。
date| day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'<br>
01/06/19 | Sat | ? | ? | ?
09/06/19 | Sun | ? | ? | ?
15/09/21 | Fri | ? | ? | ? 我希望将myDict的值映射到更大的df,将问号替换为如下所示:
date | day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'<br>
01/06/19 | Sat | 12 | 4 | 3
09/06/19 | Sun | 12 | 4 | 3
15/09/21 | Fri | 12 | 4 | 3我尝试迭代df中的每一行,例如,如果‘row’的值与我的字典中的任何键匹配,则替换'?‘使用该键的值。
for index, row in df.iterrows():
for i in range(0, len(myDict)-1):
if row['Rude Staff'] == myDict[i]:
row['Rude Staff'].replace("?", myDict[myDict[i]])这不起作用,因为iterrows不会永久地编辑行值。
如何根据df中的'Rude‘是否与我的字典中的'Rude’匹配,将我的字典键的值映射到df中的列?
发布于 2019-07-01 17:50:35
你可以在你的字典上使用一个简单的迭代:
for key, value in myDict.items():
df[key] = value发布于 2019-07-01 17:53:03
如果Dict键与df.columns同步,则可以将df.replace()与regex=True一起使用
myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}
df.replace('\?',myDict,regex=True) date day Rude Staff Poor Hygiene Out of Stock
0 01/06/19 Sat 12 4 3
1 09/06/19 Sun 12 4 3
2 15/09/21 Fri 12 4 3发布于 2019-07-01 18:18:41
假设dict中的键和DataFrame中的键相同,您可以在列上迭代,为包含'?‘的行赋值。
演示:
t = '''date| day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'
20/05/19 | Xxx | 1 | 2 | 3
01/06/19 | Sat | ? | ? | ?
09/06/19 | Sun | ? | ? | ?
15/09/21 | Fri | ? | ? | ? '''
df = pd.read_csv(io.StringIO(t.replace("'",'')), sep='\\s*\|\\s*')
myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}
print(df)
for k,v in myDict.items():
df.loc[df[k]=='?', k] = v
print(df)显示:
date day Rude Staff Poor Hygiene Out of Stock
0 20/05/19 Xxx 1 2 3
1 01/06/19 Sat ? ? ?
2 09/06/19 Sun ? ? ?
3 15/09/21 Fri ? ? ?
date day Rude Staff Poor Hygiene Out of Stock
0 20/05/19 Xxx 1 2 3
1 01/06/19 Sat 12 4 3
2 09/06/19 Sun 12 4 3
3 15/09/21 Fri 12 4 3显示只有?值被替换。
https://stackoverflow.com/questions/56833294
复制相似问题