pandas - 按条件分组熊猫
问题描述
我有数据框
id type ip
1 mcma 123
1 mcms 124
1 mcda 125
1 mcds 126
2 cic 127
2 cmc 128
我想通过带有id的函数分组使用pandas成为数据框并将类型应用于列表,如果id的类型为mcma,ip是mcma的ip,其他是'-'
id child ip
1 [{type: mcma, ip:123}, ..., {type:mcds, ip:126}] 123
2 [{type:cic, ip:127}, {type:cmc, ip:128}] -
目前,我只是获取 id 并输入正确,我不知道如何获取 ip 列。当前代码:
df = (df.groupby(["id"], as_index=True).apply(lambda x: x[["type", "ip"]].to_dict('record')).reset_index().rename(columns={0: 'child'}))
解决方案
ip
想法是如果不匹配mcma
则替换NaN
inSeries.where
然后聚合list
和第一个值ip
:
df = (df.assign(ip = df['ip'].where(df['type'].eq('mcma')),
type = df[['type','ip']].apply(lambda x: dict(x), axis=1))
.groupby('id')
.agg(child=('type',list), ip=('ip','first'))
.reset_index())
df['ip'] = df['ip'].fillna('-')
print (df)
id child ip
0 1 [{'type': 'mcma', 'ip': 123}, {'type': 'mcms',... 123
1 2 [{'type': 'cic', 'ip': 127}, {'type': 'cmc', '... -
推荐阅读
- django - 如何在 pythonware 中创建虚拟环境?
- memory-management - x86_64 中还有 HIGHMEM 分配吗?
- python-3.x - 如何在python中加入属于他们所在州的所有城市
- javascript - 如何将身份验证令牌作为标头从 html 文件传递
- javascript - ReactJs,带有按钮的下拉菜单还是我应该使用其他东西?
- oop - 组合与继承
- c++ - C++ R-Value 有大小吗?
- excel - 这些电话号码是什么类型的
- amazon-web-services - How to setup EMR cluster which supports Impala?
- ios - 分享你的ios开发证书安全吗?