繁体   English   中英

添加行名称作为键和列名称作为值来自 pandas dataframe

[英]Adding row names as keys and column names as values from pandas dataframe

我有几个不同长度和行号的 DF。 像这样:

df = 
        c1    c2    c3    c4
r1      8      4     5     2
r2      2      5     9     2

我需要遍历每一列并返回具有最高值的行,并将其作为键添加到以列名作为值的字典中。 因此,对于 c1,我会将 r1 作为键,将 c1 作为值,对于 c2,我将把 r2 作为键,将 c2 作为值。 然后对于 c3,我将 r2 作为键,现在 [c2,c3] 作为键。 此外,对于 c4 我需要所有键才能将 c4 作为值添加到它们的列表中。

我正在处理的 dataframe 有更多的列和更多的行。

最终的字典应该是这样的:

dict = {"r1": ["c1","c4"], "r2": ["c2","c3","c4"]}  

起初这似乎并不难,但我很困惑。

我遇到的最困难的问题是将列表/值与每个键分开。

任何帮助将不胜感激!

IIUC,您可以将每个值与每列的max进行比较,然后仅保留最大值并重塑为字典:

s = df.eq(df.max()).stack()
s[s].reset_index(level=1).groupby(level=0)['level_1'].agg(list).to_dict()

output: {'r1': ['c1', 'c4'], 'r2': ['c2', 'c3', 'c4']}

利用索引上的groupby返回字典这一事实的替代方法:

s = df.eq(df.max()).stack()
s = s[s].reset_index(level=0)['level_0']
out = s.index.groupby(s)
# {'r1': ['c1', 'c4'], 'r2': ['c2', 'c3', 'c4']}

让我们尝试rank

d = df.rank(ascending=False,method = 'dense').apply(lambda x: x.index[x==1].tolist(),axis=1).to_dict()
Out[52]: {'r1': ['c1', 'c4'], 'r2': ['c2', 'c3', 'c4']}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM