我有以下熊猫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);
答案 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