我的目标是确定数据帧单元格中嵌入的字典中是否存在某个键,并将结果写入附加列中。
这是我的代码的简化版本:
d = {'symbol':['AMD', 'MSFT', 'BKI', 'UNH'], 'prices': [{'2010-01-04': 9.79}, {'2010-01-04': 30.62}, {'2014-05-06': 0.14}, {'2010-01-04': 31.38}]}
df = pd.DataFrame(d).set_index('symbol')
| symbol | prices |
|:------:|:---------------------:|
| AMD | {'2010-01-04': 9.79} |
| MSFT | {'2010-01-04': 30.62} |
| BKI | {'2014-05-06': 0.14} |
| UNH | {'2010-01-04': 31.38} |
然后,我想检查字典中是否存在“2010-01-04”键,并尝试在新列中获取条件:
if '2010-01-04' in df['prices'].apply(lambda x: x.keys()):
df['Condition'] = df['prices'].apply(lambda x: True)
else:
df['Condition'] = df['prices'].apply(lambda x: False)
但是,我明白了:
| symbol | prices | condition obtained | expected condition |
|:------:|:---------------------:|--------------------|--------------------|
| AMD | {'2010-01-04': 9.79} | False | True |
| MSFT | {'2010-01-04': 30.62} | False | True |
| BKI | {'2014-05-06': 0.14} | False | False |
| UNH | {'2010-01-04': 31.38} | False | True |
最佳答案
您需要对列中的每个单元格进行调节,即条件应在应用内发生。
df['check'] = df.prices.apply(lambda x: '2010-01-04' in x)
你正在做的事情是以下
print(df['prices'].apply(lambda x: x.keys()))
结果
symbol
AMD (2010-01-04)
MSFT (2010-01-04)
BKI (2014-05-06)
UNH (2010-01-04)
Name: prices, dtype: object
然后
print('2010-01-04' in df['prices'].apply(lambda x: x.keys()))
结果
False
因此 if block 没有被执行。它转到 else block ,并将 False
分配给 df['Condition']
列的所有值(通过广播的方式)
关于python - 如何为数据帧的每一行应用一个函数,该函数检查嵌入字典的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421683/