我有一个包含以下各列的数据框。
╔════╦══════╦═════════╗
║ id ║ year ║ quarter ║
╠════╬══════╬═════════╣
║ 1 ║ 2018 ║ 3 ║
║ 1 ║ 2018 ║ 4 ║
║ 2 ║ 2018 ║ 1 ║
║ 2 ║ 2018 ║ 2 ║
║ 3 ║ 2018 ║ 4 ║
╚════╩══════╩═════════╝
预期的输出量:
╔════╦══════╦═════════╗
║ id ║ year ║ quarter ║
╠════╬══════╬═════════╣
║ 1 ║ 2018 ║ 3 ║
║ 1 ║ 2018 ║ 4 ║
║ 1 ║ 2019 ║ 1 ║
║ 2 ║ 2018 ║ 1 ║
║ 2 ║ 2018 ║ 2 ║
║ 3 ║ 2018 ║ 4 ║
║ 3 ║ 2019 ║ 1 ║
╚════╩══════╩═════════╝
我想遍历表,如果每个id的最后一个四分之一为4,我想在年份中加1,然后将四分之一定为1。这是我尝试的以下代码
for index, row in df.iterrows():
if df['quarter'] is 4:
df['quarter'] = 1
df['year'] = df['year'] + 1
对熊猫和python来说还很陌生,所以如果有人有什么好建议的话。
答案 0 :(得分:0)
可以建立一个新的df
,建立您的逻辑,然后append
df2 = df.loc[df.quarter.eq(4)].copy()
df2['year'], df2['quarter'] = df2['year'].add(1), 1
df.append(df2).sort_values(by='id')
id year quarter
0 1 2018 3
1 1 2018 4
1 1 2019 1
2 2 2018 1
3 2 2018 2
4 3 2018 4
4 3 2019 1
或者,想要一个班轮
df.append(df.loc[df.quarter.eq(4)].assign(year=df.year.add(1), quarter=1)).sort_values(by='id')