猿问

在熊猫中仅通过两列重塑

这应该是一个简单的问题,但我认为我只是错过了我应该搜索的关键字。


假设我有一个两列长的数据集,如下所示:


test = pd.DataFrame(

       {

          'color': ['white', 'white', 'white', 

                    'red', 'red', 'red', 

                    'black', 'black', 'black'],

           'value': [1,2,3,4,5,6,7,8,9]

       })

如何将其转换为以下格式:


    white   red    black

    1        4       7

    2        5       8 

    3        6       9 

我意识到这应该是一个简单的枢轴函数,例如:


test.pivot('color', 'value'),但这会产生与周围 NaN 的对角线中的值。有什么办法可以解决这个问题吗?


qq_遁去的一_1
浏览 129回答 3
3回答

catspeake

尝试:test["id"]=test.groupby("color")["color"].cumcount()test.pivot(index="id", columns="color", values="value")输出:color  black  red  whiteid0          7    4      11          8    5      22          9    6      3

白衣非少年

我已经使用pandas库使用分组函数做了一些快速解决方案 for i in test.groupby('color'):     print(i[0])     for j in range(len(i[1])):         for k in i[1].values:             print(k[1])         break 输出:black78 9red4  56white123

富国沪深

您可以从以下 3 个系列中创建序列、重置索引以及重新创建数据帧:df = pd.DataFrame({'color': ['white', 'white', 'white', 'red', 'red', 'red', 'black', 'black', 'black'],'value': [1,2,3,4,5,6,7,8,9]})serie_white = df['value'][df['color'] == "white"].reset_index(drop=True)serie_red = df['value'][df['color'] == "red"].reset_index(drop=True)serie_black = df['value'][df['color'] == "black"].reset_index(drop=True)result = pd.DataFrame({'white': serie_white, 'red': serie_red, 'black': serie_black})print(result)输出:   white  red  black0      1    4      71      2    5      82      3    6      9
随时随地看视频慕课网APP

相关分类

Python
我要回答