Python 不确定当前数据结构是否合适

Python 不确定当前数据结构是否合适,python,pandas,Python,Pandas,我有以下数据帧: PN | LastS | CurrentS | Price 111111 | 100001 | 100002 | 28 111111 | 100001 | 100001 | 32 111111 | 100001 | 100004 | 48 111111 | 100001 | 100003 | 19 222222 | 100004 | 100001 | 200 222222 | 100004 | 100003 | 236 222222 | 100002 | 100005 | 3

我有以下数据帧:

PN | LastS | CurrentS  | Price
111111 | 100001 | 100002 | 28
111111 | 100001 | 100001 | 32
111111 | 100001 | 100004 | 48
111111 | 100001 | 100003 | 19
222222 | 100004 | 100001 | 200
222222 | 100004 | 100003 | 236
222222 | 100002 | 100005 | 397
222222 | 100003 | 100006 | 302
对不起,伙计们,起初问题不清楚,是我的错。所以,列LastS代表以前的供应商,列CurrentS代表当前的供应商。 我想了解给定零件号(在我们的案例中为111111或22222)的情况:

1) 如果所有之前的供应商都相同,即LastS列中的所有值对于每个PN都相同(第1、2、3、4行代表相同的PN)。在本例中为-100001。如果这是真的,那么在列CurrentS中找到这个值(但是只迭代第一个PN-111111)。然后在我们的例子中,我们在第2行找到它,从列price中获取相应的价格,并将其放入新的列newprice中

2) 如果给定零件号的先前供应商与PN-2222222的情况不同,我们将取该PN的最后一行(列LastS-100003的最后一行),并按照与第一行相同的逻辑进行操作(在列CurrentS的第6行中找到值并取相应的价格)

我尝试运行for循环,按“PN”列分组,然后检查列“LastS”的max()==min()。如果这是真的,我不知道如何进行,如果它是目前的数据结构可能的

我预计最终结果将以这种方式呈现:

PN | LastS | CurrentS  | Price | New Price
111111 | 100001 | 100002 | 28 | 32
111111 | 100001 | 100001 | 32 | 32
111111 | 100001 | 100004 | 48 | 32
111111 | 100001 | 100003 | 48 | 32
222222 | 100004 | 100001 | 200 | 236
222222 | 100004 | 100003 | 236 | 236
222222 | 100002 | 100005 | 397 | 236
222222 | 100003 | 100006 | 302 | 236

你真的有一个条件;如果这些值都相同,那么您仍然希望取最后一个
LastS

我们得到最后一个值,然后合并以选择正确的
CurrentS
行,并使用映射返回每个PN的价格:

df1 = df.groupby('PN').LastS.last().to_frame('CurrentS').reset_index()
s = df.merge(df1).rename(columns={'Price': 'New Price'}).set_index('PN')['New Price']

df['New Price'] = df['PN'].map(s)
输出:
真的不清楚你在问什么。如果你说“对于每一行,检查该行的持续时间是否与该行的电流相同”,那么搜索该电流就没有任何意义。如果这不是你的意思,那么我只能推测你的意思。电流在每个组中不重复吗?我想他的意思是1)如果存在一行,其中电流=持续时间,则将该行r的价格输出到与r共享一个PIN的所有行,否则2)不知道(如果按持续时间然后电流排序,则可能从最后一行获取价格)我不明白你是如何达到期望的产量的。根据您的问题(特别是条件2)。举个例子,根据你所说的,你应该在第6行有新的价格=48(10003的最后一次出现在第4行,它的价格是48)。也许我误解了,但它似乎适用于第1组。在LastS中取最后一个值。基于该值。2.在当前S3中查找具有该值的行。使用该行的价格。
       PN   LastS  CurrentS  Price  New Price
0  111111  100001    100002     28         32
1  111111  100001    100001     32         32
2  111111  100001    100004     48         32
3  111111  100001    100003     19         32
4  222222  100004    100001    200        236
5  222222  100004    100003    236        236
6  222222  100002    100005    397        236
7  222222  100003    100006    302        236