假设我有一个my_df包含列重复项的数据框,例如e
foo bar foo hello
0 1 1 5
1 1 2 5
2 1 3 5
Run Code Online (Sandbox Code Playgroud)
我想创建另一个平均重复项的数据框:
foo bar hello
0.5 1 5
1.5 1 5
2.5 1 5
Run Code Online (Sandbox Code Playgroud)
我怎么能在熊猫中做到这一点?
到目前为止,我已设法识别重复:
my_columns = my_df.columns
my_duplicates = print [x for x, y in collections.Counter(my_columns).items() if y > 1]
Run Code Online (Sandbox Code Playgroud)
我不知道如何让熊猫平均他们.
In [11]: df.groupby(level=0, axis=1).mean()
Out[11]:
bar foo hello
0 1 0.5 5
1 1 1.5 5
2 1 2.5 5
Run Code Online (Sandbox Code Playgroud)
一个有点棘手的例子是如果有一个非数字列:
In [21]: df
Out[21]:
foo bar foo hello
0 0 1 1 a
1 1 1 2 a
2 2 1 3 a
Run Code Online (Sandbox Code Playgroud)
以上将提出:DataError: No numeric types to aggregate.绝对不会赢得任何效率奖,但在这种情况下这是通用的方法:
In [22]: dupes = df.columns.get_duplicates()
In [23]: dupes
Out[23]: ['foo']
In [24]: pd.DataFrame({d: df[d] for d in df.columns if d not in dupes})
Out[24]:
bar hello
0 1 a
1 1 a
2 1 a
In [25]: pd.concat(df.xs(d, axis=1) for d in dupes).groupby(level=0, axis=1).mean()
Out[25]:
foo
0 0.5
1 1.5
2 2.5
In [26]: pd.concat([Out[24], Out[25]], axis=1)
Out[26]:
foo bar hello
0 0.5 1 a
1 1.5 1 a
2 2.5 1 a
Run Code Online (Sandbox Code Playgroud)
我认为要拿走的东西是避免列重复...或者也许我不知道我在做什么.
| 归档时间: |
|
| 查看次数: |
2165 次 |
| 最近记录: |