我想复制Pandas Dataframe中的行.每行应重复n次,其中n是每行的一个字段.
import pandas as pd
what_i_have = pd.DataFrame(data={
'id': ['A', 'B', 'C'],
'n' : [ 1, 2, 3],
'v' : [ 10, 13, 8]
})
what_i_want = pd.DataFrame(data={
'id': ['A', 'B', 'B', 'C', 'C', 'C'],
'v' : [ 10, 13, 13, 8, 8, 8]
})
Run Code Online (Sandbox Code Playgroud)
这可能吗?
DSM*_*DSM 33
您可以使用np.repeat获取重复索引,然后使用它索引到框架:
>>> df2 = df.loc[np.repeat(df.index.values,df.n)]
>>> df2
id n v
0 A 1 10
1 B 2 13
1 B 2 13
2 C 3 8
2 C 3 8
2 C 3 8
Run Code Online (Sandbox Code Playgroud)
之后只有一点清理工作:
>>> df2 = df2.drop("n",axis=1).reset_index(drop=True)
>>> df2
id v
0 A 10
1 B 13
2 B 13
3 C 8
4 C 8
5 C 8
Run Code Online (Sandbox Code Playgroud)
请注意,如果您可能需要担心重复的索引,则可以使用.iloc:
In [86]: df.iloc[np.repeat(np.arange(len(df)), df["n"])].drop("n", axis=1).reset_index(drop=True)
Out[86]:
id v
0 A 10
1 B 13
2 B 13
3 C 8
4 C 8
5 C 8
Run Code Online (Sandbox Code Playgroud)
它使用的是位置,而不是索引标签.