我有一个像这样的DataFrame:
Name asn
Org1 asn1,asn2
org2 asn3
org3 asn4,asn5
我想将我的DataFrame转换为如下所示:
Name asn
Org1 asn1
Org1 asn2
org2 asn3
org3 asn4
Org3 asn5
有人知道我该怎么办?
答案 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
此解决方案也适用于带有额外列的较大数据框