为了账号安全,请及时绑定邮箱和手机立即绑定

如何重塑/“推翻”熊猫数据框

如何重塑/“推翻”熊猫数据框

GCT1015 2021-09-14 20:46:49
Topple 很可能是我想要的操作的错误名称,但我想不出更好的名称。我有 N 个形状为 (100,3) 的数据框,原始数据框的每一行都是测试的名称及其产生的两个结果。我想将单个数据帧重塑为 (1,200) 形状,并将所有测试值作为一行。之后,我会将所有 N 个数据帧附加到一个中,以 (N,200) 个数据帧结尾。这是一个带有虚拟数据的示例:import pandas as pdimport numpy as npimport randomimport stringnp.random.seed(42)tests = np.random.choice(list(string.ascii_letters),size=(100,1))results = np.random.randint(0,100,size=(100, 2))df = pd.DataFrame(np.concatenate([tests, results], axis=1), columns=["Test Name", "ValueA", "ValueB"])toppled_df = pd.DataFrame(np.random.randint(0,100,size=(1,5)),columns=["Z Value A", "Z ValueB", "t ValueA", "t ValueB", "..."])toppled_df = pd.DataFrame([[44,64,88,70,"..."]],columns=["M Value A", "M ValueB", "Z ValueA", "Z ValueB", "..."])toppled_df.head()
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

可以熔df成长格式,加入测试名称和值类型列,然后转置。


tests = np.random.choice(list(string.ascii_letters),size=(100,1))

results = np.random.randint(0,100,size=(100, 2))

df = pd.DataFrame(np.concatenate([tests, results], axis=1), 

                  columns=["Test Name", "ValueA", "ValueB"])


df2['key'] = df['Test Name'] + ' ' + df['variable']

df2['key'] = df2['Test Name'] + ' ' + df2['variable']

df2[['key', 'value']].set_index('key').T

循环遍历每个数据帧以创建融合的数据帧,然后进行连接。


查看完整回答
反对 回复 2021-09-14
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

df2 = df.set_index('Test Name').unstack()

result = pd.DataFrame(data=df2.values.reshape(1,-1), columns=df2.index)

输出:


>>> result

          ValueA                                                 ... ValueB                                                 

Test Name      M   Z  C  o   Q   h  u   M  s   w   k   k   x   J ...      w   N   u  p   S  r   U   x   z   y   S  O   C   o

0             44  88  8  0  87  10  7  34  4  27  72  11  32  22 ...     49  30  41  6  89  1  47  68  31  98  47  2  23  32

您可以像这样访问单个结果:


result['ValueA', 'M']

# or

result['ValueA']['M']


查看完整回答
反对 回复 2021-09-14
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

一种更pythonic的方式


df_out = df.set_index('Test Name').stack().to_frame().T

df_out.columns = df_out.columns.map(' '.join).str.strip()


查看完整回答
反对 回复 2021-09-14
  • 3 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号