Python:字典键作为行索引,值为列标题。如何使用词典中回顾DF中的特定值?

发布于 2025-02-04 14:54:53 字数 702 浏览 3 评论 0原文

我有一个看起来像这样的数据框:

a=['a','b','c','d']
b=['the','fox','the','then']
c=['quick','jumps','lazy','barks']
d=['brown','over','dog','loudly']
df=pd.DataFrame(zip(a,b,c,d),columns=['indexcol','col1','col2','col3'])

还有一个看起来像这样的词典:

keys=['a','b','c','d']
vals=[]
vals.append(['col1','col3'])
vals.append(['col1','col2'])
vals.append(['col1','col2','col3'])
vals.append(['col2','col3'])
newdict = {k: v for k, v in zip(keys, vals)}

我要做的是在DF中创建一个新列,该列为每行构造一个语句。以第一行为例,句子应该看起来像:

“ col1是''| col3是'懒''”

另一个示例使用第三行只是为了使手动晶体的任务清晰: “ col1是'brown'| col2是'| col3是'then''“

从本质上讲,我想使用字典键在df中查找DF中的列,作为与DF中的indexCol匹配的行。

提前致谢。

I have a dataframe that looks like this:

a=['a','b','c','d']
b=['the','fox','the','then']
c=['quick','jumps','lazy','barks']
d=['brown','over','dog','loudly']
df=pd.DataFrame(zip(a,b,c,d),columns=['indexcol','col1','col2','col3'])

and a dictionary that looks like this:

keys=['a','b','c','d']
vals=[]
vals.append(['col1','col3'])
vals.append(['col1','col2'])
vals.append(['col1','col2','col3'])
vals.append(['col2','col3'])
newdict = {k: v for k, v in zip(keys, vals)}

What I'm trying to do is to create a new column in df which constructs a statement for each row. Taking the first row as an example, the sentence should look like so:

"col1 is 'the' | col3 is 'lazy' "

another example using the 3rd row just to make the task at hand crystal clear:
"col1 is 'brown' | col2 is 'the' | col3 is 'then' "

essentially, I want to refer to the dictionary values to look up the column in df using the dictionary keys as the row reference matching to indexcol in df.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤凫 2025-02-11 14:54:53

这就是您正在寻找

def func(df_row):
    return ' | '.join(
        f'"{col}" is "{df_row[col]}"'
        for col in newdict[df_row['indexcol']]
    )

df['new col'] = df.apply(func, axis=1)
IndexColCol1Col2Col3新Col
A棕色快速我想“ Col1”是“ |” “ Col3”是“ Brown”
BFox跳过Col1”是“ Fox” | “ col2”是“跳跃”
clazy“ col1 ”是“” | “ col2”是“懒惰” | “ col3”是“狗”
D,然后吠叫大声“ col2”是“吠叫” | “ Col3”是“大声”

I guess this is what you're looking for

def func(df_row):
    return ' | '.join(
        f'"{col}" is "{df_row[col]}"'
        for col in newdict[df_row['indexcol']]
    )

df['new col'] = df.apply(func, axis=1)
indexcolcol1col2col3new col
athequickbrown"col1" is "the" | "col3" is "brown"
bfoxjumpsover"col1" is "fox" | "col2" is "jumps"
cthelazydog"col1" is "the" | "col2" is "lazy" | "col3" is "dog"
dthenbarksloudly"col2" is "barks" | "col3" is "loudly"
饮惑 2025-02-11 14:54:53

我不确定我是否正确理解您,但您可以尝试:

df = df.set_index("indexcol")

for k, v in newdict.items():
    row = df.loc[k]
    df.loc[k, "new_column"] = " | ".join(f"{i} is '{row[i]}'" for i in v)

print(df.reset_index())

打印:

  indexcol  col1   col2    col3                                      new_column
0        a   the  quick   brown                 col1 is 'the' | col3 is 'brown'
1        b   fox  jumps    over                 col1 is 'fox' | col2 is 'jumps'
2        c   the   lazy     dog  col1 is 'the' | col2 is 'lazy' | col3 is 'dog'
3        d  then  barks  loudly              col2 is 'barks' | col3 is 'loudly'

I'm not sure if I understand you correctly but you can try:

df = df.set_index("indexcol")

for k, v in newdict.items():
    row = df.loc[k]
    df.loc[k, "new_column"] = " | ".join(f"{i} is '{row[i]}'" for i in v)

print(df.reset_index())

Prints:

  indexcol  col1   col2    col3                                      new_column
0        a   the  quick   brown                 col1 is 'the' | col3 is 'brown'
1        b   fox  jumps    over                 col1 is 'fox' | col2 is 'jumps'
2        c   the   lazy     dog  col1 is 'the' | col2 is 'lazy' | col3 is 'dog'
3        d  then  barks  loudly              col2 is 'barks' | col3 is 'loudly'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文