我正在Python的pd.DataFrame中研究groupby。代码中的任务是我想要对数据进行分组,因为我想确保无论我查询多少次数据并将数据输出到MySQL,它都不会弄乱我的原始数据。
df1=pd.DataFrame(df) #this is a DataFrame with multiple different lines of 'Open' for one 'Symbol'
df2=pd.read_sql('select * from 6openposition',con=conn)
df2=df2.append(df1)
df2=df2.groupby(['Symbol']).agg({'Open':'first'})
df2.to_sql(name='6openposition', con=conn, if_exists='replace', index= False, flavor = 'mysql')
#Example Raw Data:
Symbol Open
0 A 10
1 AA 20
2 AA 30
3 AAA 40
4 AAA 50
5 AAA 50
#After I query the data for multiple times(I appended):
Symbol Open
0 A 10
1 AA 20
2 AA 30
3 AAA 40
4 AAA 50
5 AAA 50
0 AA 30
1 AAA 40
2 AAA 50
3 AAA 50
4 AAA 60
#How my code ended up with:
Symbol Open
0 A 10
1 AA 20
2 AAA 40
#What I want:
Symbol Open
0 A 10
1 AA 20
2 AA 30
3 AAA 40
4 AAA 50
5 AAA 50
6 AAA 60
对于相同的“符号”,我的原始数据在“打开”列中可能有多个值。 由于我消除了多次输入MySQL的影响,所以这里的原始数据受到了影响。
我解决这个问题的想法是同时按初始索引和“符号”进行分组,因为追加后初始索引可能是另一个“分组依据”列。初始索引为 [0,1,2,...]。如果“符号”和初始索引相同,我可以采用该组中“开盘”的第一个值。要按初始索引分组,我可以:
df2=df2.groupby(level=0).agg({'Open':'first'})
#this code will combine the lines with same indices and take the first value of 'Open' column
但我不知道如何将 'level=0' 与 'level='Symbol'' 结合起来。您能教我如何按两列(包括初始索引和另一列)进行分组吗?或者告诉我一种消除多次输入而不弄乱我的原始数据的方法。
最佳答案
从df
开始,包括你的index
,它似乎表明data
是否重复:
Symbol Open
0 A 10
1 AA 20
2 AA 30
3 AAA 40
4 AAA 50
5 AAA 50
2 AA 30
3 AAA 40
4 AAA 50
5 AAA 50
使用
df.reset_index().drop_duplicates().drop('index', axis=1)
(保留第一次出现 by default )以获得:
Symbol Open
0 A 10
1 AA 20
2 AA 30
3 AAA 40
4 AAA 50
5 AAA 50
关于python - 如何在Python数据框中按多索引(包括初始数字索引和其他列)进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622894/