如何在每个组中估算熊猫数据框中的一列[重复]
Posted
技术标签:
【中文标题】如何在每个组中估算熊猫数据框中的一列[重复]【英文标题】:how to impute a column in pandas dataframe within each group [duplicate] 【发布时间】:2017-02-16 15:26:35 【问题描述】:全部,
我有四列的数据框('key1'、'key2'、'data1'、'data2')。我在data1中插入了一些nan。现在我想用 groupby(['key1', 'key2'])
之后每个组中出现次数最多的值填充 nan。
dt = pd.DataFrame ('key1': np.random.choice(['a', 'b'], size=100),
'key2': np.random.choice(['c', 'd'], size=100),
'data1': np.random.randint(5, size=100),
'data2': np.random.randn(100),
columns = ['key1', 'key2','data1', 'data2'])
#insert nan
dt['data1'].ix[[2,6,10]]= None
# group by key1 and key2
group =dt.groupby(['key1', 'key2'])['data1']
group.value_counts(dropna=False)
key1 key2 data1
a c 1.0 8
4.0 6
0.0 4
2.0 2
3.0 1
d 0.0 7
1.0 6
4.0 6
2.0 5
NaN 3
3.0 1
b c 0.0 7
2.0 7
1.0 3
3.0 2
4.0 2
d 2.0 11
1.0 10
0.0 3
3.0 3
4.0 3
对于这个例子,我要做的是用 0.0 填充 data1 列中的 nan(组内最常见的值 (key1=a, key2=d)。
非常感谢您的帮助!
【问题讨论】:
pandas.pydata.org/pandas-docs/stable/generated/… 【参考方案1】:使用.transform(lambda y: y.fillna(y.value_counts().idxmax()))
之前
key1 key2 data1
a c 1.0 6
3.0 5
0.0 4
2.0 3
4.0 3
NaN 1
d 1.0 11
3.0 9
0.0 5
2.0 5
4.0 5
b c 4.0 7
0.0 4
3.0 4
2.0 3
NaN 2
1.0 1
d 4.0 6
1.0 5
2.0 5
3.0 4
0.0 2
Name: data1, dtype: int64
申请后.transform(lambda y: y.fillna(y.value_counts().idxmax()))
dt['nan_filled'] = dt.groupby(['key1', 'key2'])['data1'].transform(lambda y: y.fillna(y.value_counts().idxmax()))
group = dt.groupby(['key1', 'key2'])['nan_filled']
group.value_counts(dropna=False)
key1 key2 nan_filled
a c 1.0 7
3.0 5
0.0 4
2.0 3
4.0 3
d 1.0 11
3.0 9
0.0 5
2.0 5
4.0 5
b c 4.0 9
0.0 4
3.0 4
2.0 3
1.0 1
d 4.0 6
1.0 5
2.0 5
3.0 4
0.0 2
Name: nan_filled, dtype: int64
【讨论】:
谢谢!这正是我想要的!我也会对任何其他解决方案感到好奇。以上是关于如何在每个组中估算熊猫数据框中的一列[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pandas 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)