Python 打印行的次数与其在其他行中出现的值加一的次数相同
我想根据imageno+1出现的次数,在一个新的df(df2)中打印每一行。所以在下面的数据中,第1行应该打印两次(有两个7),第2行两次,第3行两次,第4行一次(有一个8),第5行一次,等等Python 打印行的次数与其在其他行中出现的值加一的次数相同,python,pandas,loops,dataframe,rows,Python,Pandas,Loops,Dataframe,Rows,我想根据imageno+1出现的次数,在一个新的df(df2)中打印每一行。所以在下面的数据中,第1行应该打印两次(有两个7),第2行两次,第3行两次,第4行一次(有一个8),第5行一次,等等 import pandas as pd print(df) x-position y-position imageno 1 220 220 6 2 627 220 6 3 620 220
import pandas as pd
print(df)
x-position y-position imageno
1 220 220 6
2 627 220 6
3 620 220 6
4 220 220 7
5 628 220 7
6 621 220 8
df2 = pd.DataFrame(columns=['x-position', 'y-position', 'imageno'])
IIUC
merge
调整'imageno'
df.assign(imageno=df.imageno+1).merge(df[['imageno']],on='imageno').assign(imageno=lambda x : x['imageno']-1)
Out[894]:
x-position y-position imageno
0 220 220 6
1 220 220 6
2 627 220 6
3 627 220 6
4 620 220 6
5 620 220 6
6 220 220 7
7 628 220 7
IIUC,使用创建一个助手系列,然后使用和,以获得所需的数量或重复次数:
df = pd.DataFrame({'x-position': {1: 220, 2: 627, 3: 620, 4: 220, 5: 628, 6: 621}, 'y-position': {1: 220, 2: 220, 3: 220, 4: 220, 5: 220, 6: 220}, 'imageno': {1: 6, 2: 6, 3: 6, 4: 7, 5: 7, 6: 8}})
s = df['imageno'].value_counts()
df2 = df.loc[df.index.repeat(df['imageno'].add(1).map(s).fillna(0).astype(int))]
[外]
谢谢我在解析时遇到一个错误
语法错误:意外的EOF
。你知道我如何解决这个问题吗?@sforbes hmmmm,如果你复制并粘贴上面的代码,包括样本数据,你会得到EOF吗。。?可能是您丢失了右括号或右引号?错误消息是否提示了SyntaxError在代码中的位置?哪一行、哪一列等?感谢您提供的示例数据。使用您发送的代码,我收到错误TypeError:无法根据规则“safe”将数组数据从dtype('float64')强制转换为dtype('int64')
我无法重现该错误,可能是版本控制问题。。?我更新了代码,添加了astype(int)
方法。你能再试一次吗?谢谢。这是可行的(没有错误消息),但我认为imagenos比应该的高一个?这是可行的,谢谢。可以解释一下代码吗?@sforbes加一,所以当合并(6+1)将与7合并时,合并后我们只需减去一,就可以回到原来的状态
x-position y-position imageno
1 220 220 6
1 220 220 6
2 627 220 6
2 627 220 6
3 620 220 6
3 620 220 6
4 220 220 7
5 628 220 7