我有一个带有电话的数据帧,其中一些持续时间为零。我想用介于0到7之间的int值替换它们,但是每次尝试都会导致错误或数据丢失。 我写了函数:
def calls_new(dur):
dur = random.randint(0,7)
return dur
,我试图这样使用它(这些行之一):
df_calls['duration'] = df_calls['duration'].apply(lambda row: x = random.randint(0,7) if x == 0 )
df_calls['duration'] = df_calls['duration'].where(df_calls['duration'] == 0, df_calls.apply(calls_new))
df_calls['duration'] = df_calls[df_calls['duration']==0].apply(calls_new)
答案 0 :(得分:1)
仅在持续时间为0的情况下使用.loc
来设置值。您可以生成所有随机数并立即设置所有内容。如果您想要7,则randint的末尾必须为8,因为文档指示高是要高出一个要绘制的最大整数。
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame({'duration': [0,10,20,0,15,0,0,211]})
m = df['duration'].eq(0)
df.loc[m, 'duration'] = np.random.randint(0, 8, m.sum())
# |
# Need this many numbers
print(df)
duration
0 4
1 10
2 20
3 7
4 15
5 6
6 2
7 211