python - 展开列条目并从 pandas 中的一行或多行添加值
问题描述
我有一个具有相同含义的条目的数据框,我想将它们放在同一行(和列)中。我的模拟df:
my = pd.DataFrame(
{'fruit': ['Apple', 'Banana', 'Pomme', 'aeble', 'Banan', 'Orange', 'Apelsin'],
'bites': [1, 2, 3, 1, 2, 3, 4]})
以及我希望它是什么:
我得到的最接近的是
my.loc['Apple'] +=my.loc['Pomme'] += my.loc['aeble']
但我想知道是否有更简单的方法。
解决方案
如果您有一些dict
将所有值映射fruit
到一种语言的方法,则可以使用groupby
andmap
与 agg 函数join
和sum
:
d = {'Apple': 'Apple',
'Banana': 'Banana',
'Pomme': 'Apple',
'aeble': 'Apple',
'Banan': 'Banana',
'Orange': 'Orange',
'Apelsin': 'Orange'
}
my.groupby(my['fruit'].map(d)).agg({'fruit': lambda x: ', '.join(x),
'bites': 'sum'})
[出去]
fruit bites
fruit
Apple Apple, Pomme, aeble 5
Banana Banana, Banan 4
Orange Orange, Apelsin 7
帮助生成映射的一种方法是dict
使用googletrans
包:
from googletrans import Translator
translator = Translator()
d = {x.origin: x.text for x in translator.translate(my['fruit'].unique().tolist())}
[出去]
{'Apple': 'Apple',
'Banana': 'Banana',
'Pomme': 'Apple',
'aeble': 'aeble',
'Banan': 'Banana',
'Orange': 'Orange',
'Apelsin': 'Orange'}
如您所见,它并不完美,但会给您一个良好的开端,而不是完全手动创建。
推荐阅读
- dart - 你如何在 mockito 中为 dart 存根方法?
- c++ - 按内核线程递增
- java - Handlebars java - quotes in helper
- wso2 - Wso2 MicroIntegrator Prometheus 指标 -DenablePrometheusApi
- docker - 如何将 docker 图像标签添加到流利的日志中
- azure-active-directory - 如何取消用户对 Web 应用程序的同意
- javascript - 无法将 PHP 变量转换为 javascript 函数
- spring-boot - Spring Boot,无法使用我的 UserDetailsService
- terraform - gitignore .tfvars 但不是 .auto.tfvars
- selenium - Browserstack 上的 Safari 现在可以正常工作