有没有一种方法可以获取get_level_values
不止一列的结果?
给定以下内容DataFrame
:
d
a b c
1 4 10 16
11 17
5 12 18
2 5 13 19
6 14 20
3 7 15 21
Run Code Online (Sandbox Code Playgroud)
我希望得到的值(即水平的元组的列表)a
和c
:
[(1, 10), (1, 11), (1, 12), (2, 13), (2, 14), (3, 15)]
Run Code Online (Sandbox Code Playgroud)
笔记:
不能给出get_level_values
一个以上的等级(例如 df.index.get_level_values(['a','c']
)
有一种解决方法,可以get_level_values
在每个所需的列上同时使用zip
它们:
例如:
a_list = df.index.get_level_values('a').values
c_list = df.index.get_level_values('c').values
print([i for i in zip(a_list,c_list)])
[(1, 10), (1, 11), (1, 12), (2, …
Run Code Online (Sandbox Code Playgroud) 我想通过辅助级别的多个值对MultiIndex DataFrame进行切片.例如,在以下DataFrame中:
val1 val2
ind1 ind2 ind3
1 6 s1 10 8
2 7 s1 20 6
3 8 s2 30 4
4 9 s2 50 2
5 10 s3 60 0
Run Code Online (Sandbox Code Playgroud)
我希望只切片中的行ind3 == s1
或 ind3 == s3
:
val1 val2
ind1 ind2
1 6 10 8
2 7 20 6
5 10 60 0
Run Code Online (Sandbox Code Playgroud)
最好的假设选项是传递多个参数.xs
,因为可以明确说明所需的参数level
.
我显然可以连接所有切片的单值DataFrame:
In[2]: pd.concat([df.xs('s1',level=2), df.xs('s3',level=2)])
Out[2]:
val1 val2
ind1 ind2
1 6 10 8
2 7 20 6 …
Run Code Online (Sandbox Code Playgroud) 在下面的数据框有一个2级多指标,即city
和date
:
temp
count
city date
SFO 2014-05-31 31
2014-06-30 30
2014-07-31 31
2014-08-31 31
2014-09-30 30
YYZ 2014-05-31 31
2014-06-30 30
2014-07-31 31
2014-08-31 31
2014-09-30 30
Run Code Online (Sandbox Code Playgroud)
我想放弃2014-05-31
,并2014-09-30
从该日起的水平.
我该怎么做呢?
评论:构建DataFrame -
df = pd.DataFrame(
{('temp', 'count'): {('SFO', Timestamp('2014-05-31 00:00:00')): 31,
('SFO', Timestamp('2014-06-30 00:00:00')): 30,
('SFO', Timestamp('2014-07-31 00:00:00')): 31,
('SFO', Timestamp('2014-08-31 00:00:00')): 31,
('SFO', Timestamp('2014-09-30 00:00:00')): 30,
('YYZ', Timestamp('2014-05-31 00:00:00')): 31,
('YYZ', Timestamp('2014-06-30 00:00:00')): 30,
('YYZ', Timestamp('2014-07-31 00:00:00')): 31,
('YYZ', Timestamp('2014-08-31 00:00:00')): …
Run Code Online (Sandbox Code Playgroud) 我有一个MultiIndex DataFrame
:
predicted_y actual_y predicted_full actual_full
subj_id org_clip
123 3 2 5 [1, 2, 3] [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我希望向以下添加新行:
predicted_y actual_y predicted_full actual_full
subj_id org_clip
123 3 2 5 [1, 2, 3] [4, 5, 6]
321 4 20 50 [10, 20, 30] [40, 50, 60] # add this row
Run Code Online (Sandbox Code Playgroud)
而下面的代码可以做到这一点:
df.loc[('321', 4),['predicted_y', 'actual_y']] = [20, 50]
df.loc[('321', 4),['predicted_full', 'actual_full']] = [[10,20,30], [40,50,60]]
Run Code Online (Sandbox Code Playgroud)
但是,当尝试在一行中添加新行时,出现错误:
df.loc[('321', 4),['predicted_y', 'actual_y', 'predicted_full', 'actual_full']] = [20, 50, [10,20,30], [40,50,60]]
>>> …
Run Code Online (Sandbox Code Playgroud) 假设我有一个字符串,例如:
string = 'This string 22 is not yet perfect1234 and 123pretty but it can be.'
Run Code Online (Sandbox Code Playgroud)
我想从我的字符串中删除任何与单词混合的数字,例如'perfect1234'
and '123pretty'
,但不是 '22'
,并获得如下输出:
string = 'This string 22 is not yet perfect and pretty but it can be.'
Run Code Online (Sandbox Code Playgroud)
有没有办法使用正则表达式或任何其他方法在 Python 中做到这一点?任何帮助,将不胜感激。谢谢!