![](/img/trans.png)
[英]Group the values using one column and return the one having max value in other column using pandas dataframe
[英]Reversing 2 columns in an excel sheet with one column having a single variable and the other column having a list using python
我在 Excel 工作表中有 2 列,下面有列和值
资产 ID | FADEL ID |
---|---|
fcb03 | 12500,12502 |
f813a | 4062 |
d79ca | 16145 |
fa632 | 6698 |
9c7cd | 4062、6698 |
4d787 | 18933 |
5569a | 4062,6698 |
2cd98 | 16145 |
5d58d | 9965 |
52b30 | 12500,12502 |
我想要一个具有以下输出的 excel 表
资产 ID | FADEL ID |
---|---|
fcb03,52b30 | 12500 |
fcb03,52b30 | 12502 |
f813a,9c7cd,5569a | 4062 |
d79ca,2cd98 | 16145 |
fa632,9c7cd,5569a | 6698 |
4d787 | 18933 |
5天5天 | 9965 |
我想通过python代码得到答案。 我尝试通过 pandas 数据框实现这一点,我对此感到震惊。
假设df
是输入 DataFrame,您可以split
、 explode
和groupby.agg
:
out = (df
.assign(**{'FADEL Ids': df['FADEL Ids'].str.split(',')})
.explode('FADEL Ids')
.groupby('FADEL Ids', as_index=False)
['Asset Ids'].agg(','.join)
)
print(out)
输出:
FADEL Ids Asset Ids
0 6698 9c7cd
1 12500 fcb03,52b30
2 12502 fcb03,52b30
3 16145 d79ca,2cd98
4 18933 4d787
5 4062 f813a,9c7cd,5569a
6 6698 fa632,5569a
7 9965 5d58d
我们可以尝试使用dot
的get_dummies
s = df.set_index('Asset Ids')['FADEL Ids'].str.get_dummies(',')
out = s.T.dot(s.index+',').str[:-1].reset_index()
out
Out[130]:
index 0
0 12500 fcb03,52b30
1 12502 fcb03,52b30
2 16145 d79ca,2cd98
3 18933 4d787
4 4062 f813a,9c7cd,5569a
5 6698 fa632,9c7cd,5569a
6 9965 5d58d
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.