繁体   English   中英

Pandas groupby - 数据框的列消失

[英]Pandas groupby - dataframe's column disappearing

我有以下名为“new_df”的数据框:

dato    uttak   annlegg Merd    ID  Leng    BW  CF  F   B   H   K
0   2020-12-15  12_20   LL  3   1   48.0    1200    1.085069    0.0 2.0 0.0 NaN
1   2020-12-15  12_20   LL  3   2   43.0    830 1.043933    0.0 1.0 0.0 NaN

列是:

'dato', 'uttak', 'annlegg', 'Merd', 'ID', 'Leng', 'BW', 'CF', 'F', 'B', 'H', 'K'

当我做:

new_df.groupby(['annlegg','Merd'],as_index=False).mean()

除了像这样的“BW”列之外,我得到了所有的手段:

annlegg Merd   ID        Leng         CF           F       B               H        K
0   KH  1   42.557143   56.398649   1.265812    0.071770    1.010638    0.600000    0.127907
1   KH  2   42.683794   56.492228   1.270522    0.021978    0.739130    0.230769    0.075862
2   KH  3   42.177866   35.490119   1.125416    0.000000    0.384146    0.333333    0.034483

当我分组时,列“BW”刚刚消失,无论“as_index”是真还是假,这是为什么呢?

看起来内容为BW列没有数字类型,而是object类型,例如用于存储字符串。 因此,当应用 groupby 和mean聚合 function 时,游览列消失了计算 object 的平均值(认为字符串通常没有意义)。

您应该首先转换您的BW列:

第一种方法: pd.to_numeric


第一种方法将安全地将所有列转换为float对象。

new_df['BW'] = pd.to_numeric(new_df['BW'])

第二种方法: df.astype


如果您不想将数据转换为float (例如,您知道该列仅包含 int,或者您对浮点精度不感兴趣),您可以使用astype方法,该方法允许您转换为几乎任何类型你要:

new_df['BW'] = new_df['BW'].astype(float)   # Converts to float
new_df['BW'] = new_df['BW'].astype(int)     # Converts to integer

您最终可以像以前一样应用您的 groupby 和聚合!

这可能是由于错误的数据类型。 你可以试试这个。

new_df = new_df.convert_dtypes()
new_df.groupby(['annlegg','Merd'],as_index=False).mean()

您可以通过以下方式检查 dtype:

new_df.dtype

您可以 try.agg() function 来定位特定列。

new_df.groupby(['annlegg','Merd']).agg({'BW':'mean'})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM