我有一个熊猫数据帧(df),看起来像这样:
+----------------------------- +
| aid | bid | x1 | x2 | count |
+----------------------------- +
| 1 | 1 | tim | 6 | 3 |
| 1 | 2 | tim | 6 | 3 |
| 1 | 3 | tim | 6 | 3 |
| 2 | 1 | bob | 6 | 2 |
| 2 | 2 | bob | 6 | 2 |
| 2 | 3 | bob | 6 | 2 |
+----------------------------- +
我需要生成一个新的数据帧,其中每个组(分组在“aid”上)由“count”列中的数字复制。应该是这样的:
+----------------------------- +
| aid | bid | x1 | x2 | count |
+----------------------------- +
| 1 | 1 | tim | 6 | 3 |
| 1 | 2 | tim | 6 | 3 |
| 1 | 3 | tim | 6 | 3 |
| 1 | 1 | tim | 6 | 3 |
| 1 | 2 | tim | 6 | 3 |
| 1 | 3 | tim | 6 | 3 |
| 1 | 1 | tim | 6 | 3 |
| 1 | 2 | tim | 6 | 3 |
| 1 | 3 | tim | 6 | 3 |
| 2 | 1 | bob | 6 | 2 |
| 2 | 2 | bob | 6 | 2 |
| 2 | 3 | bob | 6 | 2 |
| 2 | 1 | bob | 6 | 2 |
| 2 | 2 | bob | 6 | 2 |
| 2 | 3 | bob | 6 | 2 |
+----------------------------- +
我似乎无法使用熊猫中的split-apply-combine方法来实现这一点。你知道吗
我能把小组分开 数据框groupby('aid',sort=False) 但不能越过这一步。 谢谢你的帮助。你知道吗
更新:B.M.和Alexander的答案都与我提供的示例数据一致。我后来了解到,我提供的数据是不够现实的工作与我的真实数据。让我提供一个更新的数据集。你知道吗
df = pd.DataFrame({'aid': [1,1,1,2,2,2], 'bid': [1,2,3,1,2,3], 'x1': ['tim']*3 + ['bob']*3 + ['ray']*3, 'x2': [1,0,0,0,1,0,0,0,1], 'count': [3,3,3,2,2,2,4,4,4]})[['aid', 'bid', 'x1', 'x2', 'count']]
aid bid x1 x2 count
0 1 1 tim 1 3
1 1 2 tim 0 3
2 1 3 tim 0 3
3 2 1 bob 0 2
4 2 2 bob 1 2
5 2 3 bob 0 2
6 3 1 ray 0 4
7 3 2 ray 0 4
8 3 3 ray 1 4
现在,当我运行Alexander的解决方案时,我得到如下所示的输出。我需要先将输出按“aid”排序,然后按“bid”排序,其中bid始终重复1、2、3,同时在复制三行的组之前,将与该“bid”关联的X2值保留在原始数据中。你知道吗
pd.concat([frame
for count, frame in df.groupby('count', as_index=False,sort=False)
for _ in range(count)]).sort_values('aid').reset_index(drop=True)
aid bid x1 x2 count
0 1 1 tim 1 3
1 1 2 tim 0 3
2 1 3 tim 0 3
3 1 1 tim 1 3
4 1 2 tim 0 3
5 1 3 tim 0 3
6 1 1 tim 1 3
7 1 2 tim 0 3
8 1 3 tim 0 3
9 2 3 bob 0 2
10 2 1 bob 0 2
11 2 2 bob 1 2
12 2 2 bob 1 2
13 2 1 bob 0 2
14 2 3 bob 0 2
15 3 2 ray 0 4
16 3 1 ray 0 4
17 3 2 ray 0 4
18 3 3 ray 1 4
19 3 1 ray 0 4
20 3 2 ray 0 4
21 3 3 ray 1 4
22 3 1 ray 0 4
23 3 2 ray 0 4
24 3 3 ray 1 4
25 3 1 ray 0 4
26 3 3 ray 1 4
在这个输出中,它对第一个“bid”观察值(即1,2,3,1,2,3…)进行了正确排序,但随后排序进一步下降。一定有我错过的小调整。我真的很感激你对这件事有进一步的想法。你知道吗
使用B.M.提供的示例,它提供了按重复“bid”(即1,2,3,1,2,3…)排序的正确答案,但按“aid”排序时,答案将丢失。你知道吗
谢谢你对如何解决这个问题的任何建议。你知道吗
为了
可以使用列表连接:
相关问题 更多 >
编程相关推荐