У меня есть фрейм данных, похожий на этот:
df = pd.DataFrame({'col1': [i+1 for i in range(10)] + [-i-1 for i in range(10)],
'col2': ['random string'] *20})
print(df)
col1 col2
0 1 random string
1 2 random string
2 3 random string
3 4 random string
4 5 random string
5 6 random string
6 7 random string
7 8 random string
8 9 random string
9 10 random string
10 -1 random string
11 -2 random string
12 -3 random string
13 -4 random string
14 -5 random string
15 -6 random string
16 -7 random string
17 -8 random string
18 -9 random string
19 -10 random string
, и я хочу, чтобы он выглядел так:
col1 col2
0 1 random string
1 -1 random string
2 2 random string
3 -2 random string
4 3 random string
5 -3 random string
6 4 random string
7 -4 random string
8 5 random string
9 -5 random string
10 6 random string
11 -6 random string
12 7 random string
13 -7 random string
14 8 random string
15 -8 random string
16 9 random string
17 -9 random string
18 10 random string
19 -10 random string
Мой собственный способ сделать это, кажется, довольнонесколько строк, ака не pythonic.Мой код:
df2 = pd.DataFrame(index = df.index,columns = df.columns)
Ypos = df[df['col1'] > 0]
Yneg = df[df['col1'] < 0]
ind_pos = [2*i for i in range(10)]
ind_neg = [2*i+1 for i in range(10)]
df2.loc[ind_pos] = Ypos.rename({k:v for k,v in zip(Ypos.index, ind_pos)})
df2.loc[ind_neg] = Yneg.rename({k:v for k,v in zip(Yneg.index, ind_neg)})
print(df2)
Есть ли еще какой-нибудь питонический способ добиться того же результата?Заранее спасибо.
РЕДАКТИРОВАТЬ: Я хотел бы более общий метод для работы с данными, как это
col1 col2
0 1 random string
1 2 random string
2 3 random string
3 4 random string
4 5 random string
5 1x random string
6 2x random string
7 3x random string
8 4x random string
9 5x random string
10 1y random string
11 2y random string
12 3y random string
13 4y random string
14 5y random string