让楠不高兴,把你的意思改过来

2024-04-23 23:39:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将dataframe分组,并将其中包含nan的值保持在dataframe中。因此我使用fillna("")。你知道吗

然后取数值列l,取群的平均值。我遇到了一个错误Could not convert "" to numeric。它这样做是因为我的l列中有一些nan值。你知道吗

理想情况下,在我的groupby之后,我希望将那些now“”值转换回nan,以便完成.mean()计算

我所做的解决方法是,首先只将我分组的列转换为“”,执行.mean(),然后在完成后将“”值转换回nan。有没有更好的办法?你知道吗

import random
random.seed(100)

df = pd.DataFrame({
'a':[random.randint(0, 1) for x in range(1000)],
'b':[random.randint(0, 1) for x in range(1000)],
'c':[random.choice([0, 1, np.nan]) for x in range(1000)],
'd':[random.randint(0, 1) for x in range(1000)],
'e':[random.choice([0, 1, np.nan]) for x in range(1000)],
'f':[random.choice(['id', 'id2']) for x in range(1000)],
'g':[random.choice(['apple', 'orange', 'pear']) for x in range(1000)],
'h':[random.randint(0, 1) for x in range(1000)],
'i':[random.randint(0, 1) for x in range(1000)],
'j':[random.randint(0, 1) for x in range(1000)],
'k':[random.randint(0, 1) for x in range(1000)],
'l':[random.choice([1, 2, 34, 6, 36, 990, np.nan, np.nan, 6, 5, 3, 2, 1, 1, 1]) for x in range(1000)]
})


df['mean_l'] = df.fillna("").groupby(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'])['l'].transform(lambda x: x.mean())

Tags: indataframedffornprangerandomnan
1条回答
网友
1楼 · 发布于 2024-04-23 23:39:51

在本例中,我们需要避免在l列中填充na值,因为它是您的目标列。你知道吗

一种方法是用assign重新分配列l。你知道吗

df['mean_l'] = (df.fillna('')
                  .assign(l=df.l)
                  .groupby(list('abcdefghijk'))['l']
                  .transform('mean'))

相关问题 更多 >