gpt4 book ai didi

python - pandas 如何在列不均匀的数据框中复制行,仅在特定列中存在数据并形成具有偶数列的新数据框?

转载 作者:行者123 更新时间:2023-12-04 07:54:15 25 4
gpt4 key购买 nike

我有一个包含不均匀数据的 Pandas 数据框,我想将其标准化为行,以便可以对数据进行分组。前 x 列已填充且长度固定,但随后将有未定义数量的其他列。此数据是从 csv 文件中读取的,其中每个符号可以有多个主机或没有主机。
我想最终得到的是以下格式的分组数据:{"host1": [sym1, sym2, sym3], "host3": [sym5]}我已将空单元格设置为“”,并且数据帧的末尾不均匀数据如下所示:


一种

C
D


符号1
主机 1
主机2
“”

符号2
主机2
主机 1
“”

符号3
“”
“”
“”

符号4
主机 1
主机2
“”

符号5
主机 1
主机2
主机 3

符号6
主机 1
主机2
“”


我想要的是一个看起来像这样的数据框:


一种



符号1
主机 1

符号1
主机2

符号2
主机2

符号2
主机 1

符号4
主机 1

符号4
主机2

符号5
主机 1

符号5
主机2

符号5
主机 3

符号6
主机 1

符号6
主机2

最佳答案

您可以通过使这些空值变得更复杂 '""' .
IUC:

df.mask(df.eq('""')).melt('A').rename(columns={'value': 'B'})[['A', 'B']].dropna()

A B
0 sym1 host1
1 sym2 host2
3 sym4 host1
4 sym5 host1
5 sym6 host1
6 sym1 host2
7 sym2 host1
9 sym4 host2
10 sym5 host2
11 sym6 host2
16 sym5 host3
或者
df.mask(df.eq('""')).set_index('A').stack().reset_index('A', name='B')

A B
B sym1 host1
C sym1 host2
B sym2 host2
C sym2 host1
B sym4 host1
C sym4 host2
B sym5 host1
C sym5 host2
D sym5 host3
B sym6 host1
C sym6 host2
我更喜欢
dat = [
{'A': a, 'B': b}
for a, *B in zip(*map(df.get, df))
for b in B if b != '""' and b
]

pd.DataFrame(dat)

A B
0 sym1 host1
1 sym1 host2
2 sym2 host2
3 sym2 host1
4 sym4 host1
5 sym4 host2
6 sym5 host1
7 sym5 host2
8 sym5 host3
9 sym6 host1
10 sym6 host2

关于python - pandas 如何在列不均匀的数据框中复制行,仅在特定列中存在数据并形成具有偶数列的新数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66786843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com