使用python pandas从现有列创建新的地图列

时间:2019-03-15 21:03:57

标签: python pandas

我有一个pandas数据框,它具有可变的列数,例如C1,C2,C3,F1,F2 ... F100。我需要将F1,F2..F100合并为一列dict / map数据类型,如下所示。我该如何使用熊猫呢? C1,C2,C3是固定名称列,而F1,F2,F100是可变名称。

输入:

C1  C2  C3  F1  F2  F100

"1" "2" "3" "1" "2" "100"

输出:

C1  C2  C3  Features

"1" "2" "3" {"F1":"1", "F2":"2", "F100": "100"}

3 个答案:

答案 0 :(得分:1)

filter + to_dict

df['Features'] = df.filter(like='F').to_dict('records')

输出:df

  C1 C2 C3 C4 F1 F2 F3 F4                                      Features
0  1  2  3  4  5  6  7  8  {'F1': '5', 'F2': '6', 'F3': '7', 'F4': '8'}
1  x  y  z  w  r  e  s  t  {'F1': 'r', 'F2': 'e', 'F3': 's', 'F4': 't'}
2  a  b  c  d  d  f  g  h  {'F1': 'd', 'F2': 'f', 'F3': 'g', 'F4': 'h'}

答案 1 :(得分:0)

如果您使用熊猫,则可以使用df.apply()函数。

代码如下:

def merge(row):
    result = {}
    for idx in row.index:
        if idx.startswith('F'):
            result[idx] = row[idx]
    print(result)
    return result

df['FEATURE'] = df.apply(lambda x: merge(x), axis=1)

结果:

    C1  C2  C3  F1  F2  F100    FEATURE
0   1   2   3   1   2   100     {'F1': 1, 'F100': 100, 'F2': 2}
1   11  21  31  11  21  1001    {'F1': 11, 'F100': 1001, 'F2': 21}
2   12  22  32  2   22  2002    {'F1': 2, 'F100': 2002, 'F2': 22}

答案 2 :(得分:0)

请考虑以下示例。

// Update security stamp
UserManager.UpdateSecurityStamp(user.Id);

// If updating own password
if (GetCurrentUserId() == user.Id)
{
    // Find current user by ID
    var currentUser = UserManager.FindById(user.Id);

    // Update logged in user security stamp (this is so their security stamp matches and they are not signed out the next time validity check is made in CheckAuthenticationFilter.cs)
    User.AddUpdateClaim("AspNet.Identity.SecurityStamp", currentUser.SecurityStamp);
}

让我们如下定义d = pd.DataFrame([list('12345678'), list('xyzwrest'), list('abcddfgh')], columns = 'C1, C2, C3, C4, F1, F2, F3, F4'.split(', ')) d >>> C1 C2 C3 C4 F1 F2 F3 F4 0 1 2 3 4 5 6 7 8 1 x y z w r e s t 2 a b c d d f g h 列:

Features

我希望这会有所帮助。