我有一个数据框看起来像这样:
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)
还有其他pythonic方法可以实现相同的结果吗?先感谢您。
编辑:我想要一个更通用的方法来处理这样的数据框
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
如果知道子组的大小,我们称它为n
,然后将您的DataFrame
组与另一个组一起分组,我们只需要一些数学运算即可:
n=5
df.index = df.index%n + (df.index//n)/(len(df)/n)
df = df.sort_index().reset_index(drop=True)
col1 col2
0 1 random_string
1 1x random_string
2 1y random_string
3 2 random_string
4 2x random_string
5 2y random_string
6 3 random_string
7 3x random_string
8 3y random_string
9 4 random_string
10 4x random_string
11 4y random_string
12 5 random_string
13 5x random_string
14 5y random_string
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句