Python 有人能解释在数据帧上使用循环时的直觉吗?

Python 有人能解释在数据帧上使用循环时的直觉吗?,python,pandas,loops,logic,Python,Pandas,Loops,Logic,我想完全理解每一行代码的作用,因为我目前还不是100%确定。代码来自我在PythonProgramming.net上观看的一系列教程 我相信第一个“If”语句是在act_min_wage数据框中添加列,然后重命名它们 “else”语句似乎将索引与新的数据框架act_min_wage连接起来?这就是正在发生的事情吗 为什么我们需要第一个if语句?第二个加入他们就够了吗 非常感谢你的帮助 act_min_wage = pd.DataFrame() for name, group in df.gro

我想完全理解每一行代码的作用,因为我目前还不是100%确定。代码来自我在PythonProgramming.net上观看的一系列教程

我相信第一个“If”语句是在act_min_wage数据框中添加列,然后重命名它们

“else”语句似乎将索引与新的数据框架act_min_wage连接起来?这就是正在发生的事情吗

为什么我们需要第一个if语句?第二个加入他们就够了吗

非常感谢你的帮助

act_min_wage = pd.DataFrame()

for name, group in df.groupby("State"):
    if act_min_wage.empty:
        act_min_wage = group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name})
    else:
        act_min_wage = act_min_wage.join(group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name}))

act_min_wage.head()
1)
act\u min\u wage=pd.DataFrame()

创建空数据帧

2)
对于名称,df.groupby(“状态”)中的组:

groupby(“State”)-按列“State”对数据帧进行分组,因此在循环中 名称-列“状态”的唯一值 group—df中列“State”值等于当前名称的所有行

(三)

如果新的dataframe act_min_wage为空(仅在第一次迭代时),则将该组放入该组,并将列“Low.2018”重命名为name(df列“State”的唯一值)

(四)

由于act_min_wage不为空,请根据年份值将其与新组联接,默认情况下,它保留联接状态


所以,如果使用语句将空数据框按组替换为索引“Year”。

请使用玩具示例尝试以下代码,以便更好地理解所有步骤:

import pandas as pd
from IPython.display import display, HTML

df = pd.DataFrame({'State': ['NY', 'NY', 'C', 'C', 'W'], 
                   'Low.2018': [0, 5, 10, 2, 3], 
                   'Year': [2017, 2018, 2017, 2018, 2017]})

act_min_wage = pd.DataFrame()

for name, group in df.groupby("State"):
    print('NEW ITERATION', '\n', 'Group:', '\n', '\t', name)
    display(group)
    print('\n', 'Current state of act_min_wage')
    display(act_min_wage)
    print('\n\n')
    if act_min_wage.empty:
        act_min_wage = group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name})
    else:
        act_min_wage = act_min_wage.join(group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name}))

print('\n', 'Final state of act_min_wage')
display(act_min_wage)

谢谢你这么全面的解释,它真的为我澄清了这一点。
    else:
        act_min_wage = act_min_wage.join(group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name}))
import pandas as pd
from IPython.display import display, HTML

df = pd.DataFrame({'State': ['NY', 'NY', 'C', 'C', 'W'], 
                   'Low.2018': [0, 5, 10, 2, 3], 
                   'Year': [2017, 2018, 2017, 2018, 2017]})

act_min_wage = pd.DataFrame()

for name, group in df.groupby("State"):
    print('NEW ITERATION', '\n', 'Group:', '\n', '\t', name)
    display(group)
    print('\n', 'Current state of act_min_wage')
    display(act_min_wage)
    print('\n\n')
    if act_min_wage.empty:
        act_min_wage = group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name})
    else:
        act_min_wage = act_min_wage.join(group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name}))

print('\n', 'Final state of act_min_wage')
display(act_min_wage)