sách gpt4 ai đã đi

python - 如何将 m×m 数据帧转换为 pandas 中的 m*m×3 数据帧?

In lại 作者:行者123 更新时间:2023-11-28 22:14:14 26 4
mua khóa gpt4 Nike

我有一个像这样的 pandas 数据框:

df = pd.DataFrame({'A':[1,3,2,9],'B':[2,1,2,7],'C':[7,2,4,6],'D':[8,1,6,4]},index=['A','B','C','D'])

>> A B C D
A 1 2 7 8
B 3 1 2 1
C 2 2 4 6
D 9 7 6 4

我想将此数据框更改为具有相应值的对,如下所示:

>> col1 col2 val
A A 1
A B 3
A C 2
A D 9
... ... ...
D C 6
D D 4

一种方法是使用循环,但对于非常大的数据帧,这会非常慢。有一些问题解决了类似的问题,但对于 R。我猜的一种方法是将数据帧转换为 numpy 矩阵,然后使用堆栈函数。但我无法从中创建一个 m×3 数组。有人可以帮忙吗?

1 Câu trả lời

sử dụngDataFrame.stackSeries.reset_index :

df = df.stack().reset_index()
df.columns = ['col1','col2','val']

或使用 numpy.repeat 的 numpy 解决方案, numpy.tileravel :

a = np.repeat(df.index, len(df.columns))
b = np.tile(df.columns, len(df))
c = df.values.ravel()

df = pd.DataFrame({'col1':a,'col2':b,'val':c})

print (df)
col1 col2 val
0 A A 1
1 A B 2
2 A C 7
3 A D 8
4 B A 3
5 B B 1
6 B C 2
7 B D 1
8 C A 2
9 C B 2
10 C C 4
11 C D 6
12 D A 9
13 D B 7
14 D C 6
15 D D 4

val 列顺序不同的解决方案 meltDataFrame.reset_index , 对于相同的列顺序添加 reindex :

df = (df.rename_axis('col2')
.reset_index()
.melt('col2', var_name='col1', value_name='val')
.reindex(columns=['col1','col2','val']))

a = np.repeat(df.columns, len(df.columns))
b = np.tile(df.index, len(df))
c = df.values.T.ravel()

df1 = pd.DataFrame({'col1':a,'col2':b,'val':c})

print (df)

col1 col2 val
0 A A 1
1 A B 3
2 A C 2
3 A D 9
4 B A 2
5 B B 1
6 B C 2
7 B D 7
8 C A 7
9 C B 2
10 C C 4
11 C D 6
12 D A 8
13 D B 1
14 D C 6
15 D D 4

关于python - 如何将 m×m 数据帧转换为 pandas 中的 m*m×3 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53501706/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com