我想在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] })
这可能吗?
您可以np.repeat用来获取重复的索引,然后使用它来索引框架:
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
之后,只需清理一下即可:
>>> 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
请注意,如果您可能有重复的索引值得担心,则可以.iloc改用:
.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
使用位置,而不使用索引标签。