Python 复制groupby并用空字符串替换重复项
我有一个如下所示的数据帧:Python 复制groupby并用空字符串替换重复项,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个如下所示的数据帧: import pandas as pd d = {'one':[1,1,1,1,2, 2, 2, 2], 'two':['a','a','a','b', 'a','a','b','b'], 'letter':[' a','b','c','a', 'a', 'b', 'a', 'b']} df = pd.DataFrame(d) > one two letter 0 1 a a 1 1 a b
import pandas as pd
d = {'one':[1,1,1,1,2, 2, 2, 2],
'two':['a','a','a','b', 'a','a','b','b'],
'letter':[' a','b','c','a', 'a', 'b', 'a', 'b']}
df = pd.DataFrame(d)
> one two letter
0 1 a a
1 1 a b
2 1 a c
3 1 b a
4 2 a a
5 2 a b
6 2 b a
7 2 b b
我正在尝试将其转换为如下所示的数据帧,其中空单元格中填充了空字符串“”:
当我对所有列执行groupby时,我会得到一个基本上正是我所寻找的序列对象,但不是一个数据帧:
df.groupby(df.columns.tolist()).size()
1 a a 1
b 1
c 1
b a 1
2 a a 1
b 1
b a 1
b 1
如何获取所需的数据帧?如果列的值与下面的值不相同,可以屏蔽列,然后使用
where
将其更改为空字符串:
df[['one','two']] = df[['one','two']].where(df[['one', 'two']].apply(lambda x: x != x.shift()), '')
>>> df
one two letter
0 1 a a
1 b
2 c
3 b a
4 2 a a
5 b
6 b a
7 b
一些解释: 你的面具看起来像这样:
>>> df[['one', 'two']].apply(lambda x: x != x.shift())
one two
0 True True
1 False False
2 False False
3 False True
4 True True
5 False False
6 False True
7 False False
where
所做的一切就是找到正确的值,并用''
替换其余的值。您可以在值与下面的值不相同的列上进行屏蔽,然后使用where
将其更改为空字符串:
df[['one','two']] = df[['one','two']].where(df[['one', 'two']].apply(lambda x: x != x.shift()), '')
>>> df
one two letter
0 1 a a
1 b
2 c
3 b a
4 2 a a
5 b
6 b a
7 b
一些解释: 你的面具看起来像这样:
>>> df[['one', 'two']].apply(lambda x: x != x.shift())
one two
0 True True
1 False False
2 False False
3 False True
4 True True
5 False False
6 False True
7 False False
where
所做的就是找到正确的值,并将其余值替换为'
原始问题的解决方案是在前两列中的每一列中找到重复的单元格,并将其设置为空:
df.loc[df.duplicated(subset=['one', 'two']), 'two'] = ''
df.loc[df.duplicated(subset=['one']), 'one'] = ''
然而,这一转变的目的尚不清楚。可能您试图解决一个错误的问题。原始问题的解决方案是在前两列中的每一列中找到重复的单元格,并将其设置为空:
df.loc[df.duplicated(subset=['one', 'two']), 'two'] = ''
df.loc[df.duplicated(subset=['one']), 'one'] = ''
然而,这一转变的目的尚不清楚。也许你试图解决一个错误的问题。你能解释一下这个练习的目的吗?到目前为止,这听起来像是一种。在我的情况下,这是一种方便的格式,在应用程序的末尾,它涉及将数据帧转换为python“Table”对象,我正在终端环境中使用它来打印表。你能解释一下这个练习的目的吗?到目前为止,它听起来像是一种。在我的情况下,它是一种方便的格式,在应用程序的末尾,它涉及到将数据帧转换为python“Table”对象,我正在使用它在终端环境中打印表。