简体   繁体   English

Pandas dataframe如何将单列换成多列

[英]Pandas dataframe how to replace single column with multiple

For example I have a dataframe like:例如我有一个 dataframe 像:

col1 col2 col3
0    2    1

and I want to replace it so that我想更换它,这样

{0: [a,b], 1: [c,d], 2: [e, f]}

So I want to end up with a dataframe like this:所以我想得到一个像这样的 dataframe :

col1 col1b col2 col2b col3 col3b
a    b     e    f     c    d

I want to feed this data into tensorflow after transforming it so the below might also be acceptable output if tensorflow would accept it?我想在转换后将此数据输入 tensorflow ,所以如果 tensorflow 接受它,下面的 output 也可以接受?

col1  col2  col3
[a,b] [e,f] [c,d]

Below is my current code:以下是我当前的代码:

field_names = ["elo", "map", "c1", "c2", "c3", "c4", "c5", "e1", "e2", "e3", "e4", "e5", "result"]
df_train = pd.read_csv('input/match_results.csv', names=field_names, skiprows=1, usecols=range(2, 13))

for count in range(1, 6):
    str_count = str(count)
    df_train['c' + str_count] = df_train['c' + str_count].map(champ_dict)

IIUC, you can use .stack .map and .cumcount to reshape your dataframe and index. IIUC,您可以使用.stack .map.cumcount来重塑您的 dataframe 和索引。

import pandas as pd
from string import ascii_lowercase

col_dict = dict(enumerate(ascii_lowercase))
map_dict = {0: ['a','b'], 1: ['c','d'], 2: ['e', 'f']}

s = df.stack().map(map_dict).explode().reset_index()
s['level_1'] = s['level_1'] +  s.groupby(['level_1','level_0']).cumcount().map(col_dict)




df_new = s.set_index(['level_0','level_1']).unstack(1).droplevel(0,1).reset_index(drop=True)

print(df_new)

level_1  col1a col1b col2a col2b col3a col3b
0           a     b     e     f     c     d

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM