Python 3.x 在python中剪裁数据帧
我想在旧数据框的基础上创建一个新的数据框,这样的话,只会有超过列平均值的值。我的问题是,当然每列都有不同的平均值,我不想单独计算,然后用不同的值剪裁每列。我尝试了双循环,因为行数和列数不同,但没有成功。 例如,我有以下数据帧:Python 3.x 在python中剪裁数据帧,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我想在旧数据框的基础上创建一个新的数据框,这样的话,只会有超过列平均值的值。我的问题是,当然每列都有不同的平均值,我不想单独计算,然后用不同的值剪裁每列。我尝试了双循环,因为行数和列数不同,但没有成功。 例如,我有以下数据帧: a b c 4 5 6 1 2 3 7 9 2 3 6 8 我计算每一列的平均值,然后我想创建新的dataframe,其值大于相应列的平均值,因此: a1 b1 c1 4 9 6 7 6 8 我甚至不确定这是否可行,因为新数
a b c
4 5 6
1 2 3
7 9 2
3 6 8
我计算每一列的平均值,然后我想创建新的dataframe,其值大于相应列的平均值,因此:
a1 b1 c1
4 9 6
7 6 8
我甚至不确定这是否可行,因为新数据帧中的列可能会有不同的维度,但也许我们可以用NaN填充缺少的条目?我不确定正确的解决方案应该是什么。您可以比较值,然后通过索引添加
NaN
s,或者:
或:
如果要删除NaN
s,请在第一行添加带有dropna
的自定义函数:
df = df[df > df.mean()].apply(lambda x: pd.Series(x.dropna().values))
print (df)
a b c
0 4.0 9.0 6.0
1 7.0 6.0 8.0
通常,如果某列中的值小于,则最后获取NaN
s:
print (df)
a b c
0 4 5 6
1 1 2 3
2 7 9 2
3 3 6 8
4 3 6 8
print (df[df > df.mean()])
a b c
0 4.0 NaN 6.0
1 NaN NaN NaN
2 7.0 9.0 NaN
3 NaN 6.0 8.0
4 NaN 6.0 8.0
df = df[df > df.mean()].apply(lambda x: pd.Series(x.dropna().values))
print (df)
a b c
0 4.0 9.0 6.0
1 7.0 6.0 8.0
2 NaN 6.0 8.0
能否添加数据样本和预期输出?
df = df[df > df.mean()].apply(lambda x: pd.Series(x.dropna().values))
print (df)
a b c
0 4.0 9.0 6.0
1 7.0 6.0 8.0
print (df)
a b c
0 4 5 6
1 1 2 3
2 7 9 2
3 3 6 8
4 3 6 8
print (df[df > df.mean()])
a b c
0 4.0 NaN 6.0
1 NaN NaN NaN
2 7.0 9.0 NaN
3 NaN 6.0 8.0
4 NaN 6.0 8.0
df = df[df > df.mean()].apply(lambda x: pd.Series(x.dropna().values))
print (df)
a b c
0 4.0 9.0 6.0
1 7.0 6.0 8.0
2 NaN 6.0 8.0