Pandas数据框如何用多列替换单个列

3
例如,我有一个类似以下的数据框:
col1 col2 col3
0    2    1

我想替换它,以便

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

我希望最终得到一个像这样的数据框:

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

我希望将这些数据进行转换后输入到TensorFlow中,如果TensorFlow可以接受的话,下面的输出结果也可能是可接受的。
col1  col2  col3
[a,b] [e,f] [c,d]

以下是我的当前代码:

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)

你需要添加一个更好的示例,这些列中的值会发生什么?您想要重复还是 NaN?就我个人而言,我认为这将是多索引列结构的一个很好的案例。无论如何,请参见 [mcve] 和 [ask]。 - Umar.H
1
已删除标签“机器学习”和“人工智能”,因为它们与问题无关。 - Ch3steR
@roganjosh 我知道我可以使用map,但是如何扩展列数?最终我会将其馈送到tensorflow中,所以我可以以每列为一个数组的方式映射它们,而不是每列仅有单个值,或者tensorflow不接受这种方式吗?到目前为止,每次我运行tensorflow时,它似乎都只想要每列的整数,而不是整数数组。 - lexxish
好的,你能展示一下你自己的尝试吗?你卡在哪里了? - Umar.H
投票重新开放 - 完成后只需@我,我会提供答案。 - Umar.H
显示剩余5条评论
1个回答

1

如果我理解正确的话,您可以使用 .stack.map.cumcount 来重塑您的数据帧和索引。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接