数据框到字典,包括字典列表 更新:

问题描述

我正在尝试将以下数据框转换为字典。 我想通过A列进行分组,并列出常见序列。例如

示例1:

Maven 3.x

预期输出:

-Dsonar.host.url=${bamboo.sonar_url} -Dsonar.login=${bamboo.sonar_token_password} org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar -Dsonar.pitest.mode=reuseReport

示例2:

    n1 v1  v2 
2    A  C   3
3    A  D   4
4    A  C   5
5    A  D   6

预期输出:

{'A': [{'C':'3','D':'4'},{'C':'5','D':'6'}]}

所以基本上n1 n2 v1 v2 s1 A C 3 s1 A D 4 s1 A C 5 s1 A D 6 s1 B P 6 s1 B Q 3 {'s1': {'A': [{'C': 3,'D': 4},{'C': 5,'D': 6}],'B': {'P': 6,'Q': 3}}} 重复一个序列,我想将CD合并到一个字典中,并列出是否多次出现

请注意(当前我正在使用以下代码):

C

这将返回:

D

此外,可能还会有def recur_dictify(frame): if len(frame.columns) == 1: if frame.values.size == 1: return frame.values[0][0] return frame.values.squeeze() grouped = frame.groupby(frame.columns[0]) d = {k: recur_dictify(g.iloc[:,1:]) for k,g in grouped} return d 重复的另外一系列{s1 : {'A': {'C': array(['3','5'],dtype=object),'D': array(['4','6'],'B':{'E':'5','F':'6'}} 和具有单个值的s2E,F,G,E,G

解决方法

让我们创建一个函数 Picasso.with(MainActivity::this) .load(imageUrl) .into(imageView,object: com.squareup.picasso.Callback { override fun onSuccess() { //set animations here } override fun onError(e: java.lang.Exception?) { //do smth when there is picture loading error } }) ,该函数使用dictify列中的顶级键创建一个字典,并将name列中的值重复出现到不同的子字典中:

v1

from collections import defaultdict

def dictify(df):
    dct = defaultdict(list)
    for k,g in df.groupby(['n1',df.groupby(['n1','v1']).cumcount()]):
        dct[k[0]].append(dict([*g[['v1','v2']].values]))
    return dict(dct)

更新:

如果可以有主要变量的数量,即dictify(df) {'A': [{'C': 3,'D': 4},{'C': 5,'D': 6}]} ,我们可以使用更通用的方法:

[n1,n2,...]

def update(dct,keys,val):
    k,*_ = keys
    dct[k] = update(dct.get(k,{}),_,val) if _ \
        else [*np.hstack([dct[k],[val]])] if k in dct else val
    return dct

def dictify(df,keys):
    dct = dict()
    for k,g1 in df.groupby(keys):
        for _,g2 in g1.groupby(g1.groupby('v1').cumcount()):
            update(dct,k,dict([*g2[['v1','v2']].values]))

    return dict(dct)
,

这是一个简单的单行语句,可以解决您的问题:

def df_to_dict(df):
    return {name: [dict(x.to_dict('split')['data'])
                   for _,x in d.drop('name',1).groupby(d.index // 2)]
            for name,d in df.groupby('name')}

这里是一个例子:

df = pd.DataFrame({'name': ['A'] * 4,'v1': ['C','D'] * 2,'v2': [3,4,5,6]})
print(df_to_dict(df))

输出:

{'A': [{'C': 3,'D': 6}]}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...