按元素拆分列并使用pandas创建新列

时间:2019-03-16 18:39:55

标签: pandas python-2.7

目标:我想按元素(而不是字符串单元格)拆分一列,然后从该划分中创建新列,其中元素是新列的标题,另一元素是新列的标题来自其他列的值组成相应的列。

有一种方法可以对付熊猫吗?预先感谢。

示例:

[IN]:
A    1
A    2
A    6
A   99
B    7
B    8
B   19
B   18

[OUT]:

A   B
1   7
2   8
6  19
99 18

2 个答案:

答案 0 :(得分:1)

使用Series.str.splitGroupBy.cumcount进行计数,然后使用DataFrame.set_indexSeries.unstack重塑形状:

print (df)
      col
0  A    1
1  A    2
2  A    6
3  A   99
4  B    7
5  B    8
6  B   19
7  B   18

df1 = df['col'].str.split(expand=True)
g = df1.groupby(0).cumcount()

df2 = df1.set_index([0, g])[1].unstack(0).rename_axis(None, axis=1)
print (df2)
    A   B
0   1   7
1   2   8
2   6  19
3  99  18

如果2列输入数据:

print (df)
  col1  col2
0    A     1
1    A     2
2    A     6
3    A    99
4    B     7
5    B     8
6    B    19
7    B    18

g = df.groupby('col1').cumcount()
df2 = df.set_index(['col1', g])['col2'].unstack(0).rename_axis(None, axis=1)
print (df2)

    A   B
0   1   7
1   2   8
2   6  19
3  99  18

答案 1 :(得分:1)

如果有2列输入数据,则为另一种选择:

print(df)
  col1  col2
0    A     1
1    A     2
2    A     6
3    A    99
4    B     7
5    B     8
6    B    19
7    B    18

df1=pd.DataFrame(df.groupby('col1')['col2'].apply(list).to_dict())
print(df1)

    A   B
0   1   7
1   2   8
2   6  19
3  99  18