Bra*_*vis 3 python dataframe pandas
我有一个包含三列的 Pandas 数据框,前两列是因子,第三列包含计数。我想“爆炸”或“展开”数据框,以便第一列、第二列的每个唯一元素没有一行,而是行数等于计数列的总和,其中每条新行都有一个唯一且递增的标识符号,但我希望两列之一中的每个级别都有一个单独的计数器。请注意,此问题类似于如何“展开”熊猫数据框?我昨天问过,但有一些额外的并发症,我第一次没有认识到,我无法概括(为我自己)如何扩展它。
这是数据框
data = [['van', 'bc', 1], ['abb', 'bc', 3], ['vic','bc',3], ['cal', 'ab', 1], ['edm', 'ab', 2], ['cal','ab', 2], ['van', 'bc', 1]]
df = pd.DataFrame(data, columns = ['city', 'state', 'count'])
Run Code Online (Sandbox Code Playgroud)
我想把它变成这个
data = [['van', 'bc', 'dr0001'], ['abb', 'bc', 'dr0002'], ['abb', 'bc', 'dr0003'], ['abb', 'bc', 'dr0004'], ['vic', 'bc', 'dr0005'], ['vic', 'bc', 'dr0006'], ['vic', 'bc', 'dr0007'], ['cal', 'ab', 'dr0001'], ['edm', 'ab', 'dr0002'], ['edm', 'ab', 'dr0003'], ['edm', 'ab', 'dr0004'], ['edm', 'ab', 'dr0005'], ['van', 'bc', 'dr0008']]
df = pd.DataFrame(data, columns = ['city', 'state', 'id'])
Run Code Online (Sandbox Code Playgroud)
谢谢
试试这个,我认为你需要一个额外的 groupby 和一些格式来查看你的输出:
out = df.loc[df.index.repeat(df["count"])]
out = (
out.assign(
id=out.groupby("state")
.cumcount()
.add(1)
.astype(str)
.str.zfill(4)
.radd("dr")
)
.drop("count", 1)
.reset_index(drop=True)
)
Run Code Online (Sandbox Code Playgroud)
print(out)
city state id
0 van bc dr0001
1 abb bc dr0002
2 abb bc dr0003
3 abb bc dr0004
4 vic bc dr0005
5 vic bc dr0006
6 vic bc dr0007
7 cal ab dr0001
8 edm ab dr0002
9 edm ab dr0003
10 cal ab dr0004
11 cal ab dr0005
12 van bc dr0008
Run Code Online (Sandbox Code Playgroud)