我有一个看起来像这样的 Pandas 数据框
data = [['loc1', 1], ['loc2', 3], ['loc3', 3], ['loc4', 1], ['loc5',2], ['loc6',1]]
df = pd.DataFrame(data, columns = ['loc', 'count'])
并且我想展开/取消聚合它,以便我有 1 行用于 loc1,4 行用于 loc2,3 行用于 loc3,等等。其中每一个新行都有一个唯一且递增的标识符与之关联.
像这样:
data = [['loc1', 'id1'], ['loc2', 'id2'], ['loc2', 'id3'], ['loc2', 'id4'] , ['loc3', 'id5'], ['loc3', 'id6'], ['loc3', 'id7'], ['loc4', 'id8'], ['loc5', 'id9'], ['loc5', 'id10'], ['loc6', 'id11']]
df = pd.DataFrame(data, columns = ['loc', 'incrementingId'])
首先,我认为这是一种比较常见的数据操作,但我不知道该怎样称呼它。
第二,我该怎么做?
谢谢
答案 0 :(得分:3)
使用 Index.repeat
和 DataFrame.loc
,通过 DataFrame.reset_index
和 drop=True
为新列创建默认索引,然后使用 id
通过索引值添加新列和添加1
:
df = df.loc[df.index.repeat(df['count'])].reset_index(drop=True)
df['incrementingId'] = 'id' + (df.index + 1).astype(str)
print (df)
loc incrementingId
0 loc1 id1
1 loc2 id2
2 loc2 id3
3 loc2 id4
4 loc3 id5
5 loc3 id6
6 loc3 id7
7 loc4 id8
8 loc5 id9
9 loc5 id10
10 loc6 id11