gpt4 book ai didi

python - 在一个单元格中转换具有多个值的数据框

转载 作者:行者123 更新时间:2023-12-03 23:58:11 25 4
gpt4 key购买 nike

我有一个如下所示的数据框

id                          value       index
5eb3cbcc434474213e58b49a [1,2,3,4,6] [0,1,2,3,4]
5eb3f335434474213e58b49d [1,2,3,4] [0,2,3,4]
5eb3f853434474213e58b49f [1,2,3,4] [0,2,3,4]
5eb40395434474213e58b4a2 [1,2,3,4] [0,1,2,3]
5eb40425434474213e58b4a5 [1,2] [0,2]

我尝试在以下问题中转换此数据框,因为索引旨在作为每个单独值的标题,看起来像这样:

id                          0   1   2   3   4
5eb3cbcc434474213e58b49a 1 2 3 4 6
5eb3f335434474213e58b49d 1 Nan 2 3 4
5eb3f853434474213e58b49f 1 Nan 2 3 4
5eb40395434474213e58b4a2 1 2 3 4 Nan
5eb40425434474213e58b4a5 1 Nan 2 Nan Nan

我尝试首先拆分列表列表:

new_df = pd.DataFrame(df.Value.str.split(',').tolist(), index=df.Index).stack()
new_df = new_df.reset_index([0, 'Index'])
new_df.columns = ['Value', 'Index']

但是我收到了错误

TypeError: unhashable type: 'list'

是什么导致了这个错误?

最佳答案

您可以使用 .apply()连同 pd.Series() ,如下:

df = df.set_index('id').apply(lambda x: pd.Series(x['value'], index=x['index']), axis=1).reset_index()


print(df)

id 0 1 2 3 4
0 5eb3cbcc434474213e58b49a 1.0 2.0 3.0 4.0 6.0
1 5eb3f335434474213e58b49d 1.0 NaN 2.0 3.0 4.0
2 5eb3f853434474213e58b49f 1.0 NaN 2.0 3.0 4.0
3 5eb40395434474213e58b4a2 1.0 2.0 3.0 4.0 NaN
4 5eb40425434474213e58b4a5 1.0 NaN 2.0 NaN NaN

这利用了.apply()功能特点:

The default behaviour (None) depends on the return value of theapplied function: list-like results will be returned as a Series ofthose. However if the apply function returns a Series these areexpanded to columns.

此功能非常方便,可帮助我们为需要将数据扩展至列的问题提供简单的解决方案,同时通过保留现有行索引并将其代代到这些新列,将新列合并到现有数据中。我用它来提供 simple answer回答一个经典问题:How to merge a Series and DataFrame .

关于python - 在一个单元格中转换具有多个值的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67225274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com