如何在datafram中合并元素

2024-04-25 22:13:14 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试根据需求对数据帧中的元素进行排序。我从excel导入数据并使用python/pandas进行分析。你知道吗

这是我收集的数据,每个都对应于索引1-4

 d   = {
        1:['0E', '1A', '1D', '2A']

        2:[ '0E', '1A', '1D', '1E', '2A']

        3:[ '0E', '1A', '1D', '1E', '2A', '3B']

        4:['1D', '1E']
       }

我本想这样表现的:

[1D] index 1;2;3;4

[0E;1A;1D] index 1;2;3

[1E] index 2;3;4

我该怎么做?我尝试为数据帧中的每个I循环,但可以解决这个问题 谢谢!你知道吗


Tags: 数据元素pandasindex排序excel
3条回答

试试这个


import pandas as pd

data={1: ['0E', '1A', '1D', '2A'], 2: ['0E', '1A', '1D', '1E', '2A'], 3: ['0E', '1A', '1D', '1E', '2A', '3B'], 4: ['1D', '1E']}

data_mod = [[el, k] for k,v in data.items() for el in v]

df = pd.DataFrame(data=data_mod, columns=["el", "key"]) #el -> alphanumeric key, key -> [1,2,3,4], as per original dict keys

df_2 = df.groupby("el", as_index=False).agg(lambda x: ";".join([str(el) for el in list(set(x))])).groupby("key").agg(lambda x: list(x)) #final product, as per your question


如果我正确理解你的问题(以及输入数据的格式),那么:

df = pd.DataFrame([['0E', '1A', '1D', '2A'],[ '0E', '1A', '1D', '1E', '2A'], [ '0E', '1A', '1D', '1E', '2A', '3B'], ['1D', '1E']])
df.index = range(1, 5)

    0   1   2      3     4     5
1   0E  1A  1D     2A    None  None
2   0E  1A  1D     1E    2A    None
3   0E  1A  1D     1E    2A    3B
4   1D  1E  None   None  None  None

vals = np.unique(df.values.flatten()[~pd.isnull(df.values.flatten())])

将此原始数据帧的唯一值展开为新的数据帧:

df1 = pd.DataFrame()
df1["vals"] = vals
df1["indices"] = [df[df == i].stack().index.get_level_values(0).values for i in vals]

然后groupbyaggregate给出:

df1.groupby("Indices").agg(lambda x: list(x))

            Vals
Indices 
[1 2 3 4]   [1D]
[1 2 3]     [0E, 1A, 2A]
[2 3 4]     [1E]
[3]         [3B]

这里有一个简单的方法

d = {1: ['0E', '1A', '1D', '2A'],
 2: ['0E', '1A', '1D', '1E', '2A'],
 3: ['0E', '1A', '1D', '1E', '2A', '3B'],
 4: ['1D', '1E']}

df = pd.DataFrame()

for key, value in d.items():
    for x in value:
        df.loc[key, x] = str(key)

df
Out[83]: 
    0E   1A 1D   2A   1E   3B
1    1    1  1    1  NaN  NaN
2    2    2  2    2    2  NaN
3    3    3  3    3    3    3
4  NaN  NaN  4  NaN    4  NaN

相关问题 更多 >