将数据框重塑为具有无限行并在没有值的情况下填充零的数据框
Reshape dataframe to dataframe with unlimited rows and filling zeroes where no values
有没有办法将 DataFrame 重塑为另一个具有不受限制的行。我只想要一个有 3 列的 DataFrame,不管 DataFrame 中有多少行?
例如,
letters = pd.DataFrame({'Letters' : ['A', 'B', 'C','D', 'E', 'F', 'G', 'H',
'I','J']})
Letters
0 A
1 B
2 C
3 D
4 E
5 F
6 G
7 H
8 I
9 J
我想像这样重塑它,在没有值的地方填充零。
first second third
A B C
D E F
G H I
J 0 0
据我所知,在 numpy reshape 方法中你需要明确地确定你想要多少列和行..
使用:
df = (pd.DataFrame(letters.groupby(letters.index // 3)['Letters']
.apply(list)
.values
.tolist(), columns=['first','second','third']).fillna(0))
print (df)
first second third
0 A B C
1 D E F
2 G H I
3 J 0 0
您可以使用 NumPy reshape。 arr.reshape((-1, 3))
告诉 NumPy 将 arr
重塑为 (n, 3)
,其中 n
是根据 arr
的大小和另一个给定维度的大小计算的( s)(例如,在此示例中,值为 3)。
import numpy as np
import pandas as pd
letters = pd.DataFrame({'Letters' : ['A', 'B', 'C','D', 'E', 'F', 'G', 'H', 'I','J']})
arr = np.empty(((len(letters) - 1)//3 + 1)*3, dtype='O')
arr[:len(letters)] = letters['Letters']
result = pd.DataFrame(arr.reshape((-1, 3)), columns='first second third'.split())
result = result.fillna(0)
print(result)
打印
first second third
0 A B C
1 D E F
2 G H I
3 J 0 0
有没有办法将 DataFrame 重塑为另一个具有不受限制的行。我只想要一个有 3 列的 DataFrame,不管 DataFrame 中有多少行?
例如,
letters = pd.DataFrame({'Letters' : ['A', 'B', 'C','D', 'E', 'F', 'G', 'H',
'I','J']})
Letters
0 A
1 B
2 C
3 D
4 E
5 F
6 G
7 H
8 I
9 J
我想像这样重塑它,在没有值的地方填充零。
first second third
A B C
D E F
G H I
J 0 0
据我所知,在 numpy reshape 方法中你需要明确地确定你想要多少列和行..
使用:
df = (pd.DataFrame(letters.groupby(letters.index // 3)['Letters']
.apply(list)
.values
.tolist(), columns=['first','second','third']).fillna(0))
print (df)
first second third
0 A B C
1 D E F
2 G H I
3 J 0 0
您可以使用 NumPy reshape。 arr.reshape((-1, 3))
告诉 NumPy 将 arr
重塑为 (n, 3)
,其中 n
是根据 arr
的大小和另一个给定维度的大小计算的( s)(例如,在此示例中,值为 3)。
import numpy as np
import pandas as pd
letters = pd.DataFrame({'Letters' : ['A', 'B', 'C','D', 'E', 'F', 'G', 'H', 'I','J']})
arr = np.empty(((len(letters) - 1)//3 + 1)*3, dtype='O')
arr[:len(letters)] = letters['Letters']
result = pd.DataFrame(arr.reshape((-1, 3)), columns='first second third'.split())
result = result.fillna(0)
print(result)
打印
first second third
0 A B C
1 D E F
2 G H I
3 J 0 0