简体   繁体   English

如何编辑数据框的输出?

[英]How can I edit the output of my dataframe?

import csv
import pandas as pd
data = {'numbers' : [1, 2, 3, 1, 8, 4, 5, 7, 3, 6, 2, 7, 4, 5, 8]
'colors' : ['red', 'yellow', 'orange', 'green', 'blue', 'purple', 'magenta', 'grey', 'pink', 'cyan', 'lime', 'apricot', 'teal', 'navy', 'maroon']}

df = pd.DataFrame(data, columns = ['numbers', 'colors'])    
temp = df.groupby(['numbers'])
temp1 = temp.sum()['colors']
print(temp1)

Currently, my output is as such: 目前,我的输出是这样的:

1 redgreen
2 yellowlime
3 orangepink

I want to be able to format my output with arrows: 我希望能够用箭头格式化我的输出:

1 red --> green
2 yellow --> lime
3 orange --> pink

It should also be able to work with 3 or more values such as: 它还应该能够使用3个或更多值,例如:

10 value1 --> value2 --> value3 --> value4

I would appreciate any help, thank you! 我将不胜感激任何帮助,谢谢!

In one line, you can do: 在一行中,您可以:

df.groupby('numbers').agg({'colors': lambda x: ' --> '.join(x)})

If you print this, you get: 如果你打印这个,你得到:

                   colors
numbers                  
1           red --> green
2         yellow --> lime
3         orange --> pink
4         purple --> teal
5        magenta --> navy
6                    cyan
7        grey --> apricot
8         blue --> maroon

Simpler yet, thanks to @piRSquared 更简单,感谢@piRSquared

df.groupby('numbers').colors.apply(' --> '.join)

IIUC, you still can using sum IIUC,你仍然可以使用sum

(df.colors+'-->').groupby(df.numbers).sum().str[:-3]
Out[488]: 
numbers
1       red-->green
2     yellow-->lime
3     orange-->pink
4     purple-->teal
5    magenta-->navy
6              cyan
7    grey-->apricot
8     blue-->maroon
Name: colors, dtype: object

Using just python with itertools.groupby and operator.itemgetter /can substitute with lamba 使用python与itertools.groupbyoperator.itemgetter /可以替换为lamba

from itertools import groupby
from operator import itemgetter

lst = [v for v in data.values()]
z = zip(lst[0], lst[1])
z = sorted(z, key=itemgetter(0))

for k, g in groupby(z, key=itemgetter(0)):
    x = list(g)
    if len(x) > 1:
        print('{} {:<7} --> {}'.format(k, x[0][1], x[1][1]))
    else:
        print('{} {}'.format(k, x[0][1]))
 1 red --> green 2 yellow --> lime 3 orange --> pink 4 purple --> teal 5 magenta --> navy 6 cyan 7 grey --> apricot 8 blue --> maroon 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM