[英]Different behaviour in Pandas 0.20 and 0.24 while creating a dictionary using lambda function
我正在使用 2.7.13 并观察 2 个版本的 pandas 之间的不同行为。
import pandas as pd
df = pd.DataFrame({'cluster': ['5', '5', '5', '5', '5', '5'],
'mdse_item_i': ['23627102',
'23627102',
'23627102',
'23627102',
'23627102',
'23627102'],
'predPriceQty': ['35.675543',
'35.675543',
'35.675543',
'35.675543',
'35.675543',
'35.675543'],
'schedule_i': ['56', '56', '56', '56', '56', '56'],
'segment_id': ['4123', '4123', '4144', '4161', '4295', '4454'],
'wk': ['1', '1', '1', '1', '1', '1']} )
df.set_index(['segment_id', 'cluster'], inplace=True)
df.apply(lambda row:
{row['schedule_i']: {row['mdse_item_i']: {row['wk']: row['predPriceQty']}}},
axis=1)
下面是使用不同版本的 pandas 的结果
Pandas:0.24.2
segment_id cluster
4123 5 {u'56': {u'23627102': {u'1': u'35.675543'}}}
5 {u'56': {u'23627102': {u'1': u'35.675543'}}}
4144 5 {u'56': {u'23627102': {u'1': u'35.675543'}}}
4161 5 {u'56': {u'23627102': {u'1': u'35.675543'}}}
4295 5 {u'56': {u'23627102': {u'1': u'35.675543'}}}
4454 5 {u'56': {u'23627102': {u'1': u'35.675543'}}}
dtype: object
Pandas:0.20.1
mdse_item_i predPriceQty schedule_i wk
segment_id cluster
4123 5 NaN NaN NaN NaN
5 NaN NaN NaN NaN
4144 5 NaN NaN NaN NaN
4161 5 NaN NaN NaN NaN
4295 5 NaN NaN NaN NaN
4454 5 NaN NaN NaN NaN
我不确定为什么要为 Nan 创造价值,我将不胜感激这方面的任何帮助
最终我的目标是使用 to_dict() 创建一个字典,如下所示..我想避免在行之间迭代,因为我的数据集有超过 100k 行
df.apply(lambda row:
{row['schedule_i']: {row['mdse_item_i']: {row['wk']: row['predPriceQty']}}},
axis=1).to_dict()
我也想使用 pandas 到 0.20 来实现这一点,因为由于某些限制,我无法升级到 pandas 0.24
您可以只使用to_dict
然后使用字典理解:
di = df[~df.index.duplicated(keep='first')].to_dict(orient='index')
{k:{v['schedule_i']: {v['mdse_item_i']: {v['wk']: v['predPriceQty']}}}
for k,v in di.items()}
# Output:
{('4123', '5'): {'56': {'23627102': {'1': '35.675543'}}},
('4144', '5'): {'56': {'23627102': {'1': '35.675543'}}},
('4161', '5'): {'56': {'23627102': {'1': '35.675543'}}},
('4295', '5'): {'56': {'23627102': {'1': '35.675543'}}},
('4454', '5'): {'56': {'23627102': {'1': '35.675543'}}}}
可以肯定的是,即使使用 Pandas 0.2 也能正常工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.