复制该行的期望索引列

时间:2019-08-26 12:28:49

标签: python pandas

我想基于其他列的值来复制行的内容,但是希望索引不会重复。

df = pd.DataFrame({'Date': [0, 1, 2], 'Name': ['A', 'B', 'C'], 'val': [3, 1, 2]}, index=['DC', 'BB', 'BS']); df

df.reset_index(level=0,inplace = True)

pd.DataFrame(df.values.repeat(df.val, axis=0), columns=df.columns)


Input:

  index Date Name val
0    DC    0    A   3
1    DC    0    A   3
2    DC    0    A   3
3    BB    1    B   1
4    BS    2    C   2
5    BS    2    C   2

预期的输出格式:

  index Date Name val
0    DC    0    A   3
1          0    A   3
2          0    A   3
3    BB    1    B   1
4    BS    2    C   2
5          2    C   2

1 个答案:

答案 0 :(得分:0)

您可以按某个列测试重复项,例如由df1['index']设置,并由Series.duplicatedloc设置空字符串:

df1 = pd.DataFrame(df.values.repeat(df.val, axis=0), columns=df.columns)
df1.loc[df1['index'].duplicated(), 'index'] = ''
print (df1)
  index Date Name val
0    DC    0    A   3
1          0    A   3
2          0    A   3
3    BB    1    B   1
4    BS    2    C   2
5          2    C   2

print (df1.dtypes)
index    object
Date     object
Name     object
val      object
dtype: object

但是如果要避免将所有值都转换为object,请使用Index.duplicatedDataFrame.loc进行测试 Index.duplicated

df1 = df.loc[df.index.repeat(df.val)]
df1.loc[df1.index.duplicated(), 'index'] = ''
df1 = df1.reset_index(drop=True)
print (df1)
  index  Date Name  val
0    DC     0    A    3
1           0    A    3
2           0    A    3
3    BB     1    B    1
4    BS     2    C    2
5           2    C    2

print (df1.dtypes)
index    object
Date      int64
Name     object
val       int64
dtype: object