熊猫:如何将具有多个值的单元格转换为多行?

时间:2015-04-12 13:25:50

标签: python pandas dataframe

我有一个像这样的DataFrame:

Name asn
Org1 asn1,asn2
org2 asn3
org3 asn4,asn5

我想将我的DataFrame转换为如下所示:

Name asn
Org1 asn1
Org1 asn2
org2 asn3
org3 asn4
Org3 asn5

有人知道我该怎么办?

2 个答案:

答案 0 :(得分:4)

假设您的起始DataFrame名为df,您可以写:

>>> df2 = df.asn.str.split(',').apply(pd.Series)          # break df.asn into columns
>>> df2.index = df.Name                                   # set the index as df.Name
>>> df2 = df2.stack().reset_index('Name')                 # stack and reset_index
>>> df2
    Name       0
0   Org1    asn1
1   Org1    asn2
0   org2    asn3
0   org3    asn4
1   org3    asn5

剩下要做的就是重命名专栏:

df2.rename(columns={0: 'asn'}, inplace=True)

根据您的下一步行动,您可能还想设置更有用的索引。

答案 1 :(得分:0)

花了几个小时来解决这个问题,发现explode function是一个更简单的解决方案。

首先用以下列表替换多值单元格中的字符串:

    asn_lists = df.asn.str.split(',')         # split strings into list
    df.asn = asn_lists                        # replace strings with lists in the dataframe

只需使用爆炸功能:

    df2 = df.explode('asn') # explode based on the production_companies column

此解决方案也适用于带有额外列的较大数据框