【问题标题】:Python 3.x: Perform analysis on dictionary of dataframes in loopsPython 3.x:对循环中的数据帧字典进行分析
【发布时间】:2019-01-03 09:50:14
【问题描述】:

我有一个数据框 (df),其列名是 ["Home", "Season", "Date", "Consumption", "Temp"]。现在我要做的是通过“Home”、“Season”、“Temp”和“Consumption”对这些数据框进行计算。

In[56]: df['Home'].unique().tolist()
Out[56]: [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]

In[57]: df['Season'].unique().tolist()
Out[57]: ['Spring', 'Summer', 'Autumn', 'Winter']

这是目前所做的:

series = {}
for i in df['Home'].unique().tolist():
    for j in df["Season"].unique().tolist():
        series[i, j] = df[(df["Home"] == i) & (df["Consumption"] >= 0) & (df["Season"] == j)]
        for key, value in series.items():
            value["Corr"] = value["Temp"].corr(value["Consumption"])

这是一个名为“Series”的数据帧字典,作为循环的输出。

我对上一个循环的期望是给我一个数据框字典,其中包含一个新列,即“Corr”添加了“Temp”和“Consumption”的相关值,但它为最后一个家提供了一个数据框在迭代中,即 23.

只需在字典中的所有数据框中添加名为“Corr”的第六列,这将是“Temp”和“Consumption”之间的关联。您能帮我解决上述问题吗?我不知何故错过了最后一个循环中键的使用。提前致谢!

【问题讨论】:

  • 您能否添加一个小样本输入和预期输出。这会让问题更清楚。
  • 完成@DanielMesejo
  • code format 中提及您的输出。快照没有给人清晰的感觉,

标签: python python-3.x pandas loops


【解决方案1】:

所有这些循环都是完全没有必要的!只需调用:

df.groupby(['Home', 'Season'])['Consumption', 'Temp'].corr()

(感谢@jezrael 的更正)

【讨论】:

  • 它会删除我在执行进一步步骤时需要的日期列。反正出去了?并且它会进一步创建两个相关列 1. 消耗量与温度 2. 温度与消耗量。
  • 我认为如果你举一个你想得到的输出数据框的例子会有所帮助
【解决方案2】:

How to find the correlation between a group of values in a pandas dataframe column 上的一个答案有帮助。避免所有不必要的循环。感谢 @jezrael 和 @JoshFriedlander 建议 groupby 方法。赞成(y)。

在这里发布解决方案:

df = df[df["Consumption"] >= 0]

corrs = (df[["Home", "Season", "Temp"]]).groupby(
            ["Home", "Season"]).corrwith(
                    df["Consumption"]).rename(
                            columns = {"Temp" : "Corr"}).reset_index()

df = pd.merge(df, corrs, how = "left", on = ["Home", "Season"])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-10-13
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多