python - 在 Pandas 中堆叠数据帧

标签 python pandas

我正在寻找一种以下列方式在 pandas 中堆叠数据框的方法:

id     val
id01   ['a', 'b']
id02   ['b']
id03   []
id04   ['a','c']

到:

id01   'a'
       'b'
id02   'b'
id04   'a'
       'c'

最佳答案

如果想要 SeriesMultiIndex 使用 stack使用 DataFrame 构造函数:

s = pd.DataFrame(df['val'].values.tolist(), index=df['id']).stack()
print (s)
id     
id01  0    a
      1    b
id02  0    b
id04  0    a
      1    c
dtype: object

如果需要DataFrame 加double reset_index - 首先删除 MultiIndex 的第二级,然后从索引创建列:

df = (pd.DataFrame(df['val'].values.tolist(), index=df['id'])
        .stack()
        .reset_index(level=1, drop=True)
        .reset_index(name='val'))
print (df)
     id val
0  id01   a
1  id01   b
2  id02   b
3  id04   a
4  id04   c

最后如果需要替换重复值使用loc + duplicated :

df.loc[df['id'].duplicated(), 'id'] = ''
print (df)
     id val
0  id01   a
1         b
2  id02   b
3  id04   a
4         c

关于python - 在 Pandas 中堆叠数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49812523/

相关文章:

python: numpy - 使用线性插值计算百分位数

python - Pandas:如何根据特定行值将值应用于一组行?

python - 在组内排序并添加指示下方和上方行的列

python - 如何检查 Pandas 列是否具有字符串列表中的值?

python - 将 pandas 数据框从按行扩展到按列

python - 如何使用 pandas.read_csv 从列表中删除第一个元素?

python类属性

python - Tornado 不接受POST方法

python - 如何在 urwid 中创建嵌套列表框?

python - 为 django-datatables-view 转置来自模型对象的数据