说我有以下数据框:
import pandas as pd
df = pd.DataFrame({'Name': ['Jim','Bob','Tim','Sal','Mel'],
'Time': [7,7,7,8,9],
'Value':[15,13,17,6,27]})
Out[1]:
Name Time Value
0 Jim 7 15
1 Bob 7 13
2 Tim 7 17
3 Sal 8 6
4 Mel 9 27
但是我希望Time
是数据中的唯一列,但仍为数字形式。例如,7
中的Time
系列可能是7.00, 7.01, 7.02
或7.0, 7.1, 7.2
等。我如何将这个非唯一的数字熊猫列转换为仍然数字?
答案 0 :(得分:8)
您可以使用cumcount
:
df['Time'] += df.groupby('Time').cumcount() / 10
Name Time Value
0 Jim 7.0 15
1 Bob 7.1 13
2 Tim 7.2 17
3 Sal 8.0 6
4 Mel 9.0 27
答案 1 :(得分:3)
添加随机数据
df.assign(Time=df.Time.add(np.random.rand(len(df)) / 10).round(2))
Name Time Value
0 Jim 7.07 15
1 Bob 7.01 13
2 Tim 7.05 17
3 Sal 8.00 6
4 Mel 9.03 27
答案 2 :(得分:1)
如果索引为rangeindex
,请使用字符串将index
连接到Time
。使用这种方法而不是常规的加法和除法,以避免结果泄漏到点前面的数字上。
df.Time = (df.Time.astype(str) + '.' + df.index.astype(str)).astype(float)
Out[1623]:
Name Time Value
0 Jim 7.0 15
1 Bob 7.1 13
2 Tim 7.2 17
3 Sal 8.3 6
4 Mel 9.4 27