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

时间:2019-03-28 14:48:39

标签: python pandas

我有以下熊猫DataFrame:

void submitAll() async {
List<UserSearchItem> userSearchItems = [];
Firestore.instance
    .collection('insta_users')
    .snapshots()
    .listen((data) =>
    data.documents.forEach((doc){
      print(data.documents.length);

      User user = new User.fromDocument(doc);
      UserSearchItem searchItem = new UserSearchItem(user);
      userSearchItems.add(searchItem);
      print(user.bio);

    }));
print("Loaded");
print(userSearchItems.length);
}

对不起,最初我的问题不清楚,我的错。因此,LastS列代表以前的供应商,CurrentS列代表当前供应商。 我想找出给定的零件编号(在我们的情况下为111111或222222):

1)如果以前的所有供应商都相同,即,每个PN的LastS列中的所有值都相同(第1,2,3,4行代表相同的PN)。在这种情况下-100001。如果为true,则在CurrentS列中找到此值(但仅对第一个PN进行迭代-111111)。然后在本例中,我们在第2行找到它,并从Price列中获取相应的价格,并将其放入新列New Price中。

2)如果给定零件号的先前供应商与PN-222222的情况不同,则采用该PN的最后一行(LastS-100003列的最后一行),并继续执行相同的逻辑作为一个(在CurrentS列的第6行中找到值,并取相应的价格)

我试图运行一个for循环,对“ PN”列进行分组,然后检查“ LastS”列的max()== min()。如果这是真的,我不确定如何进行操作,并且在当前数据结构的情况下是否可行。

我希望最终结果将以这种方式呈现:

print(userSearchItems.length);

1 个答案:

答案 0 :(得分:1)

您真的有一个条件;如果所有值都相同,那么您仍然希望获取最后一个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)

输出:

       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