我想要创建一个csv文件,其中第1列是索引,第2列是某些类别列表,例如,第1列是我认识的人,第2列是类型:(相对,朋友,专业知识)< / p>
但在某些情况下,某些人可能既是专业熟人又是朋友,或亲戚和朋友,甚至是三者。
有没有办法可以将这些数据存储在csv文件中,这样当我将它作为数据帧加载到pandas中时,我可以按相关,朋友或专业熟人对数据进行分组,允许双倍或三倍计数同一个人以及后来的计数和与此相关的东西?这是我的问题。我想知道如何处理这种情况。
INPUT示例:
查理是一位熟练的熟人和朋友todd是亲戚和朋友
jess是一位熟练的熟人
汤姆是专业的熟人示例输出:(通过运行dfFromCSV.groupby('type').size()
)
专业认识:3
朋友:2亲戚:1
答案 0 :(得分:1)
假设您的输入存储在名为df
的数据框中,其格式如下:
person type
john friend+work
jack work
judy college
janet friend+work
jean friend
唯一的要求是你有一个分隔符,在这种情况下是'+'
。你能做的是以下几点:
df['type'].str.split('+').str.join(sep='+').str.get_dummies(sep='+').sum(axis=0)
输出:
college 1
friend 3
work 3
您可以拥有任意数量的类别,无需事先了解它们。
答案 1 :(得分:0)
假设您的关系列表是详尽无遗的,您可以像这样强制执行:
import pandas
from io import StringIO
csvstring = StringIO("""\
relationship
charlie is a professional acquaintance and friend
todd is a relative and friend
jess is a professional acquaintance
tom is a professional acquaintance
""")
rtypes = [
'professional acquaintance',
'friend',
'relative',
'rival',
'nemsis',
'mortal enemy'
]
df = pandas.read_csv(csvstring)
for rt in rtypes:
df[rt] = df['relationship'].apply(lambda x: int(rt in x))
df.select_dtypes(exclude=[object]).sum()
这给了我:
professional acquaintance 3
friend 2
relative 1
rival 0
nemsis 0
mortal enemy 0
dtype: int64
请注意,您的示例中存在拼写错误,并且此方法无法捕获这些错误。