Python Pandas:无法根据 groupby 在两个不同的列中返回字典
Posted
技术标签:
【中文标题】Python Pandas:无法根据 groupby 在两个不同的列中返回字典【英文标题】:Python Pandas : Unable to return dictionary in two different columns based on groupby 【发布时间】:2020-01-17 05:09:14 【问题描述】:我有如下数据框,
df1:
mac gw_mac building rssi type payload
0 0010403bf0db b827eb36fb0b main -45 iBeacon e2c56db5dffb48d2b060d0f5a71096e0
1 0010403bf0db d827fc36gc0c main -67 other 02010612ff590080bc2c01001d0b3a00000005000000
2 bf0db0010403 b827eb36fb0b main -71 iBeacon e2c56db5dffb48d2b060d0f5a71096e0
3 bf0db0010403 d827fc36gc0c main -59 other 02010612ff590080bc2c01001d0b3a00000005000000
基于“mac”和“building”的组,“gw_mac”和“rssi”的列值必须以“gw_mac_rssi”列的名称作为字典。
同样,基于上述相同的分组条件,“payload”和“type”的列值必须以“payload_type”的名称作为字典框起来,结果数据框应该是,
df2:
mac building gw_mac_rssi payload_type
0 0010403bf0db main 'b827eb36fb0b':-45,'d827fc36gc0c':-67 'e2c56db5dffb48d2b060d0f5a71096e0':'iBeacon','02010612ff590080bc2c01001d0b3a00000005000000':'other'
1 bf0db0010403 main 'b827eb36fb0b':-71,'d827fc36gc0c':-59 'e2c56db5dffb48d2b060d0f5a71096e0':'iBeacon','02010612ff590080bc2c01001d0b3a00000005000000':'other'
我试过了
df.groupby(['mac', 'building']) \
.apply(lambda x: x.set_index('edge_mac_gw_mac_rssi')['rssi'].to_dict()).apply(lambda x: x.set_index('type')['payload'].to_dict()).reset_index(name=["gw_mac_rssi","payload_type"])
谁能帮助我根据具有多个列值的相同分组条件构建两个不同的字典?
【问题讨论】:
【参考方案1】:首先让我们看看如何从 groupby 对象中添加一列字典:
df.groupby(['mac','building']).apply(lambda x: dict(zip(x['gw_mac'],x['rssi'])))
那么对于同时生成的两列,我们需要从lambda函数中返回pandas.Series
,那么就变成了:
df.groupby(['mac','building']).apply(lambda x: pd.Series([dict(zip(x['gw_mac'],x['rssi'])),
dict(zip(x['payload'],x['type']))],index=['gw_mac_rssi','payload_type']))
应该会产生想要的结果,不过我没有使用您的输入,使用简单的输入并工作。
【讨论】:
以上是关于Python Pandas:无法根据 groupby 在两个不同的列中返回字典的主要内容,如果未能解决你的问题,请参考以下文章