Python 2.7 熊猫数据帧:如何按值分组?
我正在使用以下熊猫数据帧(来自csv文件): 我有500名买家竞购项目1和项目2,以下200名买家竞购项目3和项目4Python 2.7 熊猫数据帧:如何按值分组?,python-2.7,pandas,numpy,scipy,Python 2.7,Pandas,Numpy,Scipy,我正在使用以下熊猫数据帧(来自csv文件): 我有500名买家竞购项目1和项目2,以下200名买家竞购项目3和项目4 buyer600 item3 item4 63 82 .. .. buyer800 item3 item4 40 12 我对Bid1和bid2求和,这样我就可以排序找到最大出价,现在我只想找到并保留每组最多5个出价。。第1组(项目1+2)和第2组(项目3+4)。我怎么做 这是我到目前为止的代码 import pan
buyer600 item3 item4 63 82
..
..
buyer800 item3 item4 40 12
我对Bid1和bid2求和,这样我就可以排序找到最大出价,现在我只想找到并保留每组最多5个出价。。第1组(项目1+2)和第2组(项目3+4)。我怎么做
这是我到目前为止的代码
import pandas as pd
df = pd.read)csv('myfile.csv')
sum = (df[df.columns[4:]].sum(1))
df['sum'] = calc
df.sort_values(['sort of sum'], ascending=[False], inplace=True)
df.to_csv('results.csv')
输出应该类似于
-----------------------------------------
buyer itemX itemY sum of bid
-----------------------------------------
buyer13 item1 item2 350
buyer2 item1 item2 283
buyer65 item1 item2 236
buyer602 item3 item4 80
buyer703 item3 item4 76
buyer640 item3 item4 69
一种方法是创建两个数据帧,一个用于item1和2买家,另一个用于item3和4买家
df1 = df[df['itemX'] == 'item1']
df2 = df[df['itemX'] == 'item3']
然后,您可以创建一个新列,对出价进行求和
df1['sum_bids'] = df1['bid1'] + df1['bid2']
然后使用sort\u值对数据帧进行排序
sorted_df1 = df1.sort_values(['sum_bids'], ascending=False)
然后你可以重新索引它们
sorted_df1.index = range(1,len(sorted_df1) + 1)
然后选择前5行
max_bids = sorted_df1[:5]
一种方法是创建两个数据帧,一个用于item1和2买家,另一个用于item3和4买家
df1 = df[df['itemX'] == 'item1']
df2 = df[df['itemX'] == 'item3']
然后,您可以创建一个新列,对出价进行求和
df1['sum_bids'] = df1['bid1'] + df1['bid2']
然后使用sort\u值对数据帧进行排序
sorted_df1 = df1.sort_values(['sum_bids'], ascending=False)
然后你可以重新索引它们
sorted_df1.index = range(1,len(sorted_df1) + 1)
然后选择前5行
max_bids = sorted_df1[:5]
首先,我将制作一个示例数据帧,我认为它与您描述的数据帧类似
bids_df = pd.DataFrame({'buyer_id': ['buyer' + str(i) for i in range(1, 501)] + ['buyer' + str(i) for i in range(600, 800)],
'itemX': ['item1'] * 500 + ['item3'] * 200,
'itemY': ['item2'] * 500 + ['item4'] * 200,
'bid1': [randint(10, 100) for _ in range(700)],
'bid2': [randint(10, 100) for _ in range(700)]})
bids_df = bids_df[['buyer_id', 'itemX', 'itemY', 'bid1', 'bid2']]
然后我们可以为出价和排序的总和添加一列:您已经在您的问题中做了这么多了
bids_df['bid_sum'] = bids_df['bid1'] + bids_df['bid2']
bids_df = bids_df.sort_values(by=['bid_sum'], ascending=False)
最后,我们可以按您描述的项目对数据帧进行分组,只需从每个组中获取前5行(因为我们已经按出价和对它们进行了排序)
这将给出生成的数据帧:
buyer_id itemX itemY bid1 bid2 bid_sum
60 buyer61 item1 item2 99 97 196
498 buyer499 item1 item2 98 97 195
470 buyer471 item1 item2 92 99 191
120 buyer121 item1 item2 98 93 191
50 buyer51 item1 item2 100 91 191
573 buyer673 item3 item4 100 94 194
639 buyer739 item3 item4 90 95 185
512 buyer612 item3 item4 89 94 183
691 buyer791 item3 item4 100 78 178
659 buyer759 item3 item4 87 91 178
首先,我将制作一个示例数据帧,我认为它与您描述的数据帧类似
bids_df = pd.DataFrame({'buyer_id': ['buyer' + str(i) for i in range(1, 501)] + ['buyer' + str(i) for i in range(600, 800)],
'itemX': ['item1'] * 500 + ['item3'] * 200,
'itemY': ['item2'] * 500 + ['item4'] * 200,
'bid1': [randint(10, 100) for _ in range(700)],
'bid2': [randint(10, 100) for _ in range(700)]})
bids_df = bids_df[['buyer_id', 'itemX', 'itemY', 'bid1', 'bid2']]
然后我们可以为出价和排序的总和添加一列:您已经在您的问题中做了这么多了
bids_df['bid_sum'] = bids_df['bid1'] + bids_df['bid2']
bids_df = bids_df.sort_values(by=['bid_sum'], ascending=False)
最后,我们可以按您描述的项目对数据帧进行分组,只需从每个组中获取前5行(因为我们已经按出价和对它们进行了排序)
这将给出生成的数据帧:
buyer_id itemX itemY bid1 bid2 bid_sum
60 buyer61 item1 item2 99 97 196
498 buyer499 item1 item2 98 97 195
470 buyer471 item1 item2 92 99 191
120 buyer121 item1 item2 98 93 191
50 buyer51 item1 item2 100 91 191
573 buyer673 item3 item4 100 94 194
639 buyer739 item3 item4 90 95 185
512 buyer612 item3 item4 89 94 183
691 buyer791 item3 item4 100 78 178
659 buyer759 item3 item4 87 91 178