我有以下数据帧。我想知道是否可以将 data 列分成多列。例如,从这里:

ID 日期数据
6 21/05/2016 A: 7, B: 8, C: 5, D: 5, A: 8
6 21/01/2014 B: 5, C: 5, D: 7
6 02/04/2013 A: 4, D:7
7 05/06/2014 C: 25
7 12/08/2014 日:20
8 18/04/2012 A: 2, B: 3, C: 3, E: 5, B: 4
8 21/03/2012 F: 6, B: 4, F: 5, D: 6, B: 4

进入这个:

ID 日期数据 A B C D E F
6 21/05/2016 A: 7, B: 8, C: 5, D: 5, A: 8 15 8 5 5 0 0
6 21/01/2014 B: 5, C: 5, D: 7 0 5 5 7 0 0
6 02/04/2013 B: 4, D: 7, B: 6 0 10 0 7 0 0
7 05/06/2014 C: 25 0 0 25 0 0 0
7 12/08/2014 D:20 0 0 0 20 0 0
8 18/04/2012 A: 2, B: 3, C: 3, E: 5, B: 4 2 7 3 0 5 0
8 21/03/2012 F: 6, B: 4, F: 5, D: 6, B: 4 0 8 0 6 0 11

我已经尝试过这个 Split strings in tuples into columns, in Pandas 和这个 pandas: How do I split text in a column into multiple rows? 但它们在我的情况下不起作用。

编辑
data 列有一些复杂性,例如在第一行 A 重复,因此这些值汇总在 A 列下(请参阅第二个表)。

最佳答案

这是一个函数,可以将字符串转换为字典并根据键聚合值;转换后,使用 pd.Series 方法很容易得到结果:

def str_to_dict(str1):
    import re
    from collections import defaultdict
    d = defaultdict(int)
    for k, v in zip(re.findall('[A-Z]', str1), re.findall('\d+', str1)):
        d[k] += int(v)
    return d

pd.concat([df, df['dictionary'].apply(str_to_dict).apply(pd.Series).fillna(0).astype(int)], axis=1)

python -  Pandas ,数据帧 : Splitting one column into multiple columns-LMLPHP

关于python - Pandas ,数据帧 : Splitting one column into multiple columns,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38384145/

10-12 17:39
查看更多