我有一个pandas数据框,我希望通过添加' count'来简化复制(在一列,这里是第一列)。列(此处为最后一列,预设为" 1"对于我所在的行)。 我的数据框如下所示:
df = pandas.DataFrame([["a", ..., 1], # last row always 1 (this will be the 'count' column
["a", ..., 1], #"a" = identical, other values not necessarily
["b", ..., 1],
["c", ..., 1],
["a", ..., 1]
["d", ..., 1],
["d", ..., 1]])
请注意,我感兴趣的是第一个重复出现字母的专栏。其他列不一定是重复的,但可以在这里忽略。我想逐行浏览数据框并执行以下操作:
我不确定执行此操作的最佳方式是在同一个数据框架中还是在新数据框架中,但最终会像这样结束df:
df2 = pandas.DataFrame([["a", ..., 3], # no changes except for last column counting three instances of "a": this line and two further lines
# line deleted: "a" reoccurs
["b", ..., 1], # no changes
["c", ..., 1], # no changes
# line deleted: "a" reoccurs
["d", ..., 2], # no changes except last column counting two instances of "d": this line and one more
]) # line deleted: "d" reoccurs
我真的不知道如何解决这个问题,我希望得到一些建议。 提前谢谢!
答案 0 :(得分:1)
以下代码
import pandas as pd
df = pd.DataFrame({"first":["a", "b", "b", "a", "b", "c"], "second":range(6)})
result = df.groupby('first').first()
result['count'] = df['first'].value_counts()
result.reset_index(inplace=True)
创建数据框
first second
0 a 0
1 b 1
2 b 2
3 a 3
4 b 4
5 c 5
并将其变为
first second count
0 a 0 2
1 b 1 3
2 c 5 1
这正是您所需要的。
<强>更新即可。在评论中,您询问了如何将不同的聚合应用于不同的列。这是一个例子
import pandas as pd
df = pd.DataFrame({"first":["a", "b", "b", "a", "b", "c"],
"second":range(6), 'third': range(6)})
result = df.groupby('first').agg({'second': lambda x: x.iloc[0], 'third': max})
result['count'] = df['first'].value_counts()
result.reset_index(inplace=True)
产生
first second third count
0 a 0 3 2
1 b 1 4 3
2 c 5 5 1
以便second
和third
列的汇总方式不同。
答案 1 :(得分:1)
大卫的数据
df.groupby('first').agg({'first':'count','second':'first'}).rename(columns={'first':'count'})
Out[1177]:
count second
first
a 2 0
b 3 1
c 1 5