总结 pandas DataFrame

Summarize pandas DataFrame

我想总结一下pandas DataFrame文件。这个是这样的->

City      Name      Date
London    Joey      1998
Vegas     Chandler  1999

所以结果会是这样的。 1998 年,乔伊在伦敦。 1999 年,钱德勒在拉斯维加斯。 像这样的东西。有什么解决方法吗?或者哪些模块可以帮助我做到这一点? 谢谢。

有了这个 csv:

City,Name,Date
London,Joey,1998
Vegas,Chandler,1999

您可以使用以下代码:

import pandas as pd

df = pd.read_csv("test.csv")
for i in range(len(df)):
    print(f"In {df.iloc[i,2]}, {df.iloc[i,0]} was in {df.iloc[i,1]}.")

它遍历数据帧的行,并使用字符串中的格式前缀使用 df.iloc.

打印包含每行值的句子

要解决这个问题,您实际上只需要遍历行即可。使用列表理解会比使用 `iterrows:

更快

如果要修改DataFrame:

在这里,我们使用 DataFrame.apply 来“应用”每一行的函数:

def format_row(row):
    return f"In {row['Date']}, {row['Name']} was in {row['City']}."

df = df.apply(lambda r: format_row(r), axis=1)
print(df)

输出:

0       In 1998, Joey was in London.
1    In 1999, Chandler was in Vegas.

如果你想得到句子列表:

您可以定义一个格式化行的函数,如下所示:

def format_row(row):
    return f"In {row[0]}, {row[1]} was in {row[2]}."

然后使用列表理解zip相应的行并将其传递给函数。

rows = [format_row(r) for r in zip(df["Date"], df["Name"], df["City"])]

如果这些列是 DataFrame 中唯一的列,使用 DataFrame.values 会更干净,但提供相同的输出:

rows = [format_row(r) for r in df.values]

在这种情况下,您必须在函数内交换索引值:

return f"In {row[2]}, {row[1]} was in {row[0]}."

给定数据

df=pd.DataFrame(data=[['London','Joey','1998'],['Vegas','Chandler','1999']],columns=['City','Name','Date'])

如果需要,可以添加一个新列作为摘要,或者您可以按照@gmdev 的建议将其放在列表中。

df['Summary']=df.apply(lambda x: 'In '+str(x.Date)+' '+str(x.Name)+' was in '+str(x.City),axis=1)