【问题标题】:Creating a new column in Pandas在 Pandas 中创建一个新列
【发布时间】:2020-09-30 04:58:29
【问题描述】:

提前感谢您抽出时间帮助我! (下面提供代码)(Data Here)

我正在尝试平均前 3 列并将其插入为标有“表土”的新列。这样做的最佳方法是什么?

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
raw_data = pd.read_csv('all-deep-soil-temperatures.csv', index_col=1, parse_dates=True)
df_all_stations = raw_data.copy()
df_selected_station.fillna(method = 'ffill', inplace=True);
df_selected_station_D=df_selected_station.resample(rule='D').mean()
df_selected_station_D['Day'] = df_selected_station_D.index.dayofyear
mean=df_selected_station_D.groupby(by='Day').mean()
mean['Day']=mean.index
#mean.head()

【问题讨论】:

    标签: python pandas numpy dataframe time-series


    【解决方案1】:

    试试这个:

    mean['avg3col']=mean[['5 cm', '10 cm','15 cm']].mean(axis=1)
    

    【讨论】:

      【解决方案2】:
      df['new column'] = (df['col1'] + df['col2'] + df['col3'])/3
      

      【讨论】:

        【解决方案3】:

        您可以通过以下方式使用apply 方法:

        mean['Topsoil'] = mean.apply(lambda row: np.mean(row[0:3]), axis=1)
        

        您可以在以下链接中了解apply 方法:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

        逻辑是您沿着特定轴多次执行相同的任务。

        注意:在函数名称中调用数据结构是不明智的,在您的情况下,最好是 mean_df 而不是 mean

        【讨论】:

        • apply 是底层循环,出于性能原因,如果存在矢量化替代方案,最好不要使用它。
        • @jezrael 谢谢,我不知道是这种情况。我会尽量避免这个问题。
        • 这是避免它的原型 - 算术运算
        • @jezrael 所以只是为了让它更清楚,对于算术运算iloc 总是更快更合适?
        【解决方案4】:

        使用 DataFrame.iloc 按位置选择 - 前 3 列使用 mean

        mean['Topsoil'] = mean.iloc[:, :3].mean(axis=1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-15
          • 2021-12-22
          • 1970-01-01
          • 1970-01-01
          • 2018-12-20
          • 1970-01-01
          • 2017-08-26
          • 1970-01-01
          相关资源
          最近更新 更多