python - 如何根据数据帧值生成新的Python数据帧系列

标签 python pandas dataframe series

我有一个由下面的脚本生成的数据框 - 引入数据框“数据”。

理想情况下,我想生成一个新的数据帧,它结合了 id 和 1 : 值的序列。

d = {'id': ['a', 'b','c'], 'value': [1, 2,1]}
data = pd.DataFrame(data=d)
data

这意味着理想的输出是:

|------|---------|
|  ID  |  value  |
|------|---------|
|   a  |  1      |
|   b  |  1      |
|   b  |  2      |
|   c  |  1      |
|------|---------|

最佳答案

使用Index.repeat按列 value 并按计数器重新分配值 GroupBy.cumcount :

#if not default RangeIndex
#data = data.reset_index(drop=True)
df = data.loc[data.index.repeat(data['value'])]
df['value'] = df.groupby(level=0).cumcount() + 1
df = df.reset_index(drop=True)
print (df)
  id  value
0  a      1
1  b      1
2  b      2
3  c      1

替代解决方案 DataFrame.assign :

df = (data.loc[data.index.repeat(data['value'])]
          .assign(value=lambda x: x.groupby(level=0).cumcount() + 1)
          .reset_index(drop=True))

关于python - 如何根据数据帧值生成新的Python数据帧系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57075168/

相关文章:

python - Pandas :重新采样后计算唯一值

python - 按多列对数据框中的连续条目进行聚类/分组

python - 基于其他条目的 Pandas 对列的操作

python - Pandas 数据框插入行

python - 将日期时间转换为最近的时间点

python - 即使我使用 "__init__",我是否需要手动将属性从父类(super class)的 "__init__"传递到子类的 "super()"?

python - 如何将 <1 的项目分类为 0

python - RPM 的 %files 部分需要什么

python - 如何计算pandas中多列的值?

Python:remove() 似乎不起作用