我想有条件地更新数据框列中的值。
我正在处理一家冰淇淋店及其面临的投诉。问题和这些问题的总计计数存储在字典中:
DT
我还有一个更大的df,其中包含一个月的冰淇淋商店数据。
myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}
我想将myDict的值映射到较大的df,以替换问号,如下所示:
date| day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'<br>
01/06/19 | Sat | ? | ? | ?
09/06/19 | Sun | ? | ? | ?
15/09/21 | Fri | ? | ? | ?
我尝试遍历df中的每一行,例如,如果'Rude Staff'的值与字典中的任何键匹配,则替换'?'并带有该键的值。
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中的“ Rude Staff”是否与字典中的“ Rude Staff”匹配,将字典键的值映射到df中的列?
答案 0 :(得分:1)
您可以对字典使用简单的迭代:
for key, value in myDict.items():
df[key] = value
答案 1 :(得分:1)
如果字典键与else
{
$query = mysqli_query($con,"INSERT INTO database VALUES (NULL,'$username','$name','$email','$pwh','$date')");
}
同步,则可以将df.replace()
与df.columns
结合使用:
regex=True
myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}
df.replace('\?',myDict,regex=True)
答案 2 :(得分:0)
假设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
显示仅替换?
个值。