遍历多个DataFrame的更有效方法

时间:2019-09-11 06:21:39

标签: python pandas

我正在尝试创建自定义DataFrame,以表示数据中所有缺少的(NaN)值。

解决方案我想出了办法,但是在300行和50列的集合上它速度慢且效果不佳。

熊猫版本=“ 0.24.2”

class ImageProperties {
  public int BrightnessPercentage { get; set; }
}

class ImageDrawer {
  public int BrightnessPercentage { get; set; }
}

ImageProperties _imgProps = new ImageProperties();
ImageDrawer _imgDrawer = new ImageDrawer();

void Test() {
    trackBar1.DataBindings.Add("Value", _imgProps, "BrightnessPercentage", false, DataSourceUpdateMode.OnPropertyChanged);

    trackBar1.DataBindings.Add("Value", _imgDrawer, "BrightnessPercentage", false, DataSourceUpdateMode.OnPropertyChanged);
}

我觉得我在熊猫中进行迭代的方式不正确。是否有适当(或通用)的解决方案来解决此类问题?我应该以某种方式使用groupby吗?

非常感谢您的投入, 谢谢您的宝贵时间。

2 个答案:

答案 0 :(得分:2)

您不需要遍历多个数据框来破坏您的结果,实际上可以将groupbyapply一起使用:

import pandas as pd

data = {
    'city_code'     : ['Sydney2017', 'London2017', 'Sydney2018', 'London2018'],
    'population_mil': [5.441, 7.375, pd.np.nan, pd.np.nan],
    'temp': [28, pd.np.nan, 24, 25]
}

df = pd.DataFrame(data)
df.groupby('city_code').apply(lambda x: x.isna().any()).any(axis=1)

答案 1 :(得分:-1)

我认为您可以使用isna()函数进行na检查:

df = pd.DataFrame(data)
df.assign(has_NaN=df.population_mil.isna()).drop('population_mil',1)


    city_code   has_NaN
0   Sydney2017  False
1   London2017  False
2   Sydney2018  True
3   London2018  True