对熊猫数据框上的选择性行的操作

时间:2019-12-11 19:29:38

标签: python-3.x pandas

我有一个带有电话的数据帧,其中一些持续时间为零。我想用介于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)

1 个答案:

答案 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